#include <iostream>
#include <fstream>
#include <vector>
#include <cstdint>
// BMP文件头
#pragma pack(2)
struct BMPFileHeader {
uint16_t bfType;
uint32_t bfSize;
uint16_t bfReserved1;
uint16_t bfReserved2;
uint32_t bfOffBits;
};
// BMP信息头
struct BMPInfoHeader {
uint32_t biSize;
int32_t biWidth;
int32_t biHeight;
uint16_t biPlanes;
uint16_t biBitCount;
uint32_t biCompression;
uint32_t biSizeImage;
int32_t biXPelsPerMeter;
int32_t biYPelsPerMeter;
uint32_t biClrUsed;
uint32_t biClrImportant;
};
// 写入像素颜色
void writePixel(std::ostream& file, uint8_t red, uint8_t green, uint8_t blue) {
file.put(blue);
file.put(green);
file.put(red);
}
int main() {
int width = 100;
int height = 100;
// 打开文件
std::ofstream file("rainbow_image.bmp", std::ios::out | std::ios::binary);
if (!file.is_open()) {
std::cerr << "Error opening file." << std::endl;
return 1;
}
BMPFileHeader fileHeader;
BMPInfoHeader infoHeader;
fileHeader.bfType = 0x4D42; // 'BM'
fileHeader.bfSize = sizeof(BMPFileHeader) + sizeof(BMPInfoHeader) + 3 * width * height;
fileHeader.bfReserved1 = 0;
fileHeader.bfReserved2 = 0;
fileHeader.bfOffBits = sizeof(BMPFileHeader) + sizeof(BMPInfoHeader);
infoHeader.biSize = sizeof(BMPInfoHeader);
infoHeader.biWidth = width;
infoHeader.biHeight = height;
infoHeader.biPlanes = 1;
infoHeader.biBitCount = 24;
infoHeader.biCompression = 0;
infoHeader.biSizeImage = 0;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
infoHeader.biClrUsed = 0;
infoHeader.biClrImportant = 0;
file.write(reinterpret_cast<char*>(&fileHeader), sizeof(BMPFileHeader));
file.write(reinterpret_cast<char*>(&infoHeader), sizeof(BMPInfoHeader));
// 生成彩虹渐变
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
uint8_t red = static_cast<uint8_t>(255 * x / width); // 红色渐变
uint8_t green = static_cast<uint8_t>(255 * y / height); // 绿色渐变
uint8_t blue = static_cast<uint8_t>(255 - (255 * x / width)); // 蓝色渐变
writePixel(file, red, green, blue);
}
}
file.close();
std::cout << "24位真彩BMP文件已生成:rainbow_image.bmp" << std::endl;
return 0;
}
生成24位真彩图(.bmp格式)
最新推荐文章于 2024-05-19 18:30:05 发布