在C语言中,存储一个BMP文件需要按照BMP文件格式的规范进行处理。下面是一个基本示例代码,它创建一个简单的BMP文件并存储:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#pragma pack(push, 1)
typedef struct {
uint16_t bfType;
uint32_t bfSize;
uint16_t bfReserved1;
uint16_t bfReserved2;
uint32_t bfOffBits;
} BITMAPFILEHEADER;
typedef struct {
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;
} BITMAPINFOHEADER;
#pragma pack(pop)
void createBMP(const char *filename, int width, int height) {
FILE *file;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
int imageSize = width * height * 3;
unsigned char *imageData = (unsigned char *)malloc(imageSize);
// Fill the image with a gradient (example data)
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int index = (y * width + x) * 3;
imageData[index] = (unsigned char)(x % 256); // Blue
imageData[index + 1] = (unsigned char)(y % 256); // Green
imageData[index + 2] = 0; // Red
}
}
// Fill the BITMAPFILEHEADER
bfh.bfType = 0x4D42; // 'BM'
bfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + imageSize;
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
// Fill the BITMAPINFOHEADER
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = width;
bih.biHeight = height;
bih.biPlanes = 1;
bih.biBitCount = 24; // 24-bit bitmap
bih.biCompression = 0; // BI_RGB
bih.biSizeImage = imageSize;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
// Write the data to the file
file = fopen(filename, "wb");
if (file == NULL) {
fprintf(stderr, "Error: Could not open file for writingn");
free(imageData);
return;
}
fwrite(&bfh, sizeof(BITMAPFILEHEADER), 1, file);
fwrite(&bih, sizeof(BITMAPINFOHEADER), 1, file);
fwrite(imageData, imageSize, 1, file);
fclose(file);
free(imageData);
}
int main() {
createBMP("test.bmp", 100, 100);
return 0;
}
这个程序创建了一个100×100像素的BMP文件,其中每个像素都根据其位置赋值一个颜色渐变。BMP文件头和信息头的结构根据BMP文件格式规范定义,并用#pragma pack指令保证结构体按1字节对齐。
运行这个程序会生成一个名为test.bmp
的文件。可以根据需要修改width
和height
参数来生成不同尺寸的BMP文件。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/191973.html