BMP图片保存格式(c语言)
如果在某种场景下获取到rgb数据裸流,需要保存图片,查看保存的数据是否正常,通常利用保存bmp图片,通过window 看图app查看,这里主要介绍bmp数据头:
以结构体动态设置(长度54字节)
位图文件头(bmp file header): 提供文件的格式、大小等信息 14byte
位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息 40byte
struct bmp_head {
unsigned short bftype;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfoffBits;//54
}__attribute__((packed)); //14byte
struct bmp_info{
unsigned int biSize; //0x28
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biColorBit;//argb8888 rgb888 rgb565
unsigned int biCompression;
unsigned int biSizeImage;
unsigned int biXPelsPerMeter;
unsigned int biYPelsPerMeter;
unsigned int biClrImportant;
unsigned int biClrUsed;
}__attribute__((packed));//40byte
struct bmp_head head;
struct bmp_info info;
head.bftype = 0x4d42;
head.bfSize = sizeof(struct bmp_info)+sizeof(struct bmp_head) + len;
head.bfReserved1 = 0;
head.bfReserved2 = 0;
head.bfoffBits = 54;
info.biSize = sizeof(struct bmp_info);
info.biWidth = width;
info.biHeight = height;
info.biPlanes = 1;
info.biColorBit = 32;
info.biCompression = 0;
info.biSizeImage = len;
info.biXPelsPerMeter = 5000;
info.biYPelsPerMeter = 5000;
info.biClrImportant = 0;
info.biClrUsed = 0;
或者可以采用定的bmp头文件 下表(长度66字节)
//3-6 len //19-22 pixel weith //23-26 pixel height //29-30 bitwith //35-38 pixel size byte
const unsigned char bmp_header_480p[66]={
0x42,0x4D,0x42,0xc0,0x12,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x28,0x00,//1-16
0x00,0x00,0x80,0x02,0x00,0x00,0xe0,0x01,0x00,0x00,0x01,0x00,0x20,0x00,0x03,0x00,//17-32
0x00,0x00,0x00,0xc0,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//33-48
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,//49-64
0x00,0x00
};
const unsigned char bmp_header_720p[66]={
0x42,0x4D,0x42,0x40,0x38,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x28,0x00,//1-16
0x00,0x00,0x00,0x05,0x00,0x00,0xd0,0x02,0x00,0x00,0x01,0x00,0x20,0x00,0x03,0x00,//17-32
0x00,0x00,0x00,0x40,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//33-48
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,//49-64
0x00,0x00
};
const unsigned char bmp_header_1080p[66]={
0x42,0x4D,0x42,0x90,0x7e,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x28,0x00,//1-16
0x00,0x00,0x80,0x07,0x00,0x00,0x38,0x04,0x00,0x00,0x01,0x00,0x20,0x00,0x03,0x00,//17-32
0x00,0x00,0x00,0x90,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//33-48
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,//49-64
0x00,0x00
};