[技术干货] bmp图片编码格式

BMP二进制文件由文件头、位图信息头、颜色信息和图形数据四部分组成,是最简单的无损图片格式。 # 文件头 ``` typedef struct tagBITMAPFILEHEADER { WORD bfType; //文件类型 DWORD bfSize; //位图文件的大小单位为字节 WORD bfReserved1; //位图文件保留字1,必须为0 WORD bfReserved2; //位图文件保留字2,必须为0 DWORD bfOffBits; //位图数据的起始位置相对文件头的偏移量,单位为字节 } ``` # 位图信息头 ``` typedef struct tagBITMAPINFOHEADER{ DWORD biSize; //字节 LONG biWidth; //宽度 LONG biHeight; //高度 WORD biPlanes; //目标设备的级别,必须为1 WORD biBitCount; //像素位数 DWORD biCompression; //位图压缩类型,必须是0(不压缩) DWORD biSizeImage; //位图大小 LONG biXPelsPerMeter; //水平分辨率 LONG biYPelsPerMeter; //竖直分辨率 DWORD biClrUsed; //位图实际使用的颜色表中的颜色数 DWORD biClrImportant; //位图显示过程中重要的颜色数 } ``` # 颜色信息 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。 ``` typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; ``` 颜色表中RGBQUAD结构数据的个数有biBitCount来确定: 当biBitCount=1,4,8时,分别有2,16,256个表项; 当biBitCount=24时,没有颜色表项。 # 图形数据 位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数: 当biBitCount=1时,8个像素占1个字节; 当biBitCount=4时,2个像素占1个字节; 当biBitCount=8时,1个像素占1个字节; 当biBitCount=24时,1个像素占3个字节,按顺序分别为B,G,R