分类: C/C++
2008-08-05 13:53:41
三、CFG_DIB的使用
下载本文配套代码
关于位图文件操作的资料很多。为了方便开发人员的工作,写下本文,介绍了位图文件结构,在此基础之上设计了通用类CFG_DIB,用于进行位图文件的读写操作。
一、位图文件结构
位图文件由三部分组成:文件头 位图信息 位图像素数据
1、位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义:
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 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) |