构件详解
1. 位图文件头
位图文件头包含有关于文件类型、文件大小、存放位置等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义:
typedef struct tagBITMAPFILEHEADER { /* bmfh */
UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
其中:
bfType
|
说明文件的类型.(该值必需是0x4D42,也就是字符’BM’。我们不需要判断OS/2的位图标识,这么做现在来看似乎已经没有什么意义了,而且如果要支持OS/2的位图,程序将变得很繁琐。所以,在此只建议你检察’BM’标识)
|
bfSize
|
说明文件的大小,用字节为单位
|
bfReserved1
|
保留,必须设置为0
|
bfReserved2
|
保留,必须设置为0
|
bfOffBits
|
说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。
|
2. 位图信息头
位图信息用BITMAPINFO结构来定义,它由位图信息头(bitmap-information header)和彩色表(color table)组成,前者用BITMAPINFOHEADER结构定义,后者用RGBQUAD结构定义。BITMAPINFO结构具有如下形式:
typedef struct tagBITMAPINFO { /* bmi */
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
其中:
bmiHeader
|
说明BITMAPINFOHEADER结构,其中包含了有关位图的尺寸及位格式等信息
|
bmiColors
|
说明彩色表RGBQUAD结构的阵列,其中包含索引图像的真实RGB值。
|
BITMAPINFOHEADER结构包含有位图文件的大小、压缩类型和颜色格式,其结构定义为:
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结构所需要的字数。注:这个值并不一定是BITMAPINFOHEADER结构的尺寸,它也可能是sizeof(BITMAPV4HEADER)的值,或是sizeof(BITMAPV5HEADER)的值。这要根据该位图文件的格式版本来决定,不过,就现在的情况来看,绝大多数的BMP图像都是BITMAPINFOHEADER结构的(可能是后两者太新的缘故吧:-)。
|
biWidth
|
说明图象的宽度,以象素为单位
|
biHeight
|
说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。(注:当高度值是一个负数时(正向图像),图像将不能被压缩(也就是说biCompression成员将不能是BI_RLE8或BI_RLE4)。
|
biPlanes
|
为目标设备说明位面数,其值将总是被设为1
|
biBitCount
|
说明比特数/象素,其值为1、4、8、16、24、或32
|
biCompression
|
说明图象数据压缩的类型。其值可以是下述值之一:
 |
BI_RGB:没有压缩; |
 |
BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引); |
 |
BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成 |
 |
BI_BITFIELDS:每个象素的比特由指定的掩码决定。 |
|
biSizeImage
|
说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0 |
biXPelsPerMeter
|
说明水平分辨率,用象素/米表示 |
biYPelsPerMeter
|
说明垂直分辨率,用象素/米表示 |
biClrUsed
|
说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项) |
biClrImportant
|
说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。
|
|