位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据
位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义:
typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;
其中的bfType值应该是“BM”(0x4d42),标志该文件是位图文件。bfSize的值是位图文件的大小。
位图信息中所记录的值用于分配内存,设置调色板信息,读取像素值等。
以下是位图信息结构的定义:
typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO;
可见位图信息也是由两部分组成的:位图信息头 + 颜色表
颜色表是由颜色表项组成的,颜色表项结构的定义如下:
typedef struct tagRGBQUAD { // rgbq BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;
其中需要注意的问题是,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。
位图信息头包含了单个像素所用字节数以及描述颜色的格式,此外还包括位图的宽度、高度、目标设备的位平面数、图像的压缩格式。以下是位图信息头结构的定义:
typedef struct tagBITMAPINFOHEADER{ // bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;
下表是对结构体当中各个成员的说明:
结构成员 | 说 明 |
biSize | 结构BITMAPINFOHEADER的字节数,即sizeof(BITMAPINFOHEADER)* |
biWidth | 以像素为单位的图像宽度* |
biHeight | 以像素为单位的图像长度* |
biplanes | 目标设备的位平面数 |
biBitCount | 每个像素的位数*(1) |
biCompression | 图像的压缩格式(这个值几乎总是为0) |
biSizeImage | 以字节为单位的图像数据的大小(对BI_RGB压缩方式而言) |
biXPelsPermeter | 水平方向上的每米的像素个数 |
biYpelsPerMeter | 垂直方向上的每米的像素个数 |
biClrused | 调色板中实际使用的颜色数(2) |
biClrImportant | 现实位图时必须的颜色数(3) |
说明:*是需要加以注意的部分,因为它们是我们在进行位图操作时经常参考的变量
时间: 2024-10-26 17:30:57