BMP是Windows下显示图片的基本格式,后缀名为“.bmp”,分为DDB(设备相关位图)和DIB(设备无关位图),现在一般为DIB。BMP文件以文件头和文件体构成,文件头中包括BITMAPFILEHEADER,BITMAPINFOHEADER和若干RGBQUAD组成,文件体是图片内容。
BITMAPFILEHEADER格式:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}__attribute__((packed)) BITMAPFILEHEADER;
bfType
Windows文件格式,固定为0x4d42
bfSize
Bmp整个文件大小
bfReserved1
保留字,不考虑, 为0
bfReserved2
保留字,不考虑, 为0
bfOffBits
实际位图的偏移字节数,即前三个部分长度(BMP文件头,BMP信息头及RGBQUAD三部分)之和
BITMAPINFOHEADER格式:
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}__attribute((packed)) BITMAPINFOHEADER;
biSize
指定此结构体的长度,一般为40
biWidth
位图宽 以像素为单位
biHeight
位图高 以像素为单位
biPlanes
表示bmp图片的平面属性,显然显示器只有一个平面,所以恒等于0x0001.
biBitCount
表示bmp图片的颜色位数,即1位图(单色或二值图像),8位图,16位图,24位图,32位图等等。 (对应RGBQUAD个数,当值为1,4,8时,分别有2,16,256个表项,当值为24时,没有颜色表项)
biCompression
表示图片的压缩属性,bmp图片是不压缩的,等于0,所以这里为0x00000000.
biSizeImage
表示bmp图片数据区的大小,当上一个数值biCompression等于0时,这里的值可以省略不填,所以这里等于0x00000000.
biXPelsPerMeter
表示图片X轴每米多少像素,可省略。
biYPelsPerMeter
表示图片Y轴每米多少像素,可省略。
biClrUsed
表示使用了多少个颜色索引表,一般biBitCount属性小于16时才会用到,等于0时表示有2^biBitCount个颜色索引,这里仍等于0x00000000。
biClrImportant
表示有多少个重要的颜色,等于0时表示所有颜色都很重要,这里等于0x00000000。
RGBQUAD格式:
typedef struct tagRGBQUAD
{
BYTE rgbBlue; //该颜色的蓝色分量
BYTE rgbGreen; //该颜色的绿色分量
BYTE rgbRed; //该颜色的红色分量
BYTE rgbReserved; //保留值
}__attribute__((packed)) RGBQUAD