bitmap格式图片是未经压缩的,一般24bit位图(即一个像素点以24个二进制位表示)。
分别用8个二进制位表示R/G/B三种颜色,这样一共可以表示256*256*256=16777216种颜色。
8bit的位图则为黑白图像,32bit位图除16777216种颜色外还有8个bit表示光栅(有待具体研究)。
BMP图像文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息头(Bitmap Info Header)、颜色表(Color Map)和位图数据(即图像数据,Data Bits或Data Body)。
第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下:
typedef struct FileHeader
{
unsigned short bfType;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
}__attribute__((packed))FileHeader;
BITMAPFILEHEADER结构的各个域详细说明如下:
bfType:位图文件类型,必须是0x424D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。
bfSize:位图文件大小,包括这14个字节。
bfReserved1, bfReserved2:Windows保留字,暂不用。
bfOffBits:从文件头到实际的位图数据的偏移字节数,bitmap文件前3个部分(文件头、信息头、颜色表)的长度之和。
第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节。其定义如下:
typedef struct InfoHeader
{
unsigned int biSize;
int biWidth;
int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
}__attribute__((packed))InfoHeader;
BITMAPINFOHEADER结构的各个域的详细说明如下:
biSize:本结构的长度,为40个字节。
biWidth:位图的宽度,以像素为单位。
biHeight