(2)文件信息头BITMAPINFOHEADER结构在VB中声明如下:
Type BITMAPINFOHEADER biSize As Long biWidth As Long biHeight As Long biPlanes As Integer biBitCount As Integer biCompression As Long biSizeImage As Long biXPelsPerMeter As Long biYPelsPerMeter As Long biClrUsed As Long biClrImportant As Long End Type |
上述结构中,参数biSize表示BITMAPINFOHEADER结构的大小;参数biWidth表示位图的高度,单位是像素;参数biHeight 位图的宽度,单位是像素;参数biPlanes 设备的位平面数,现在都是1;参数biBitCount 图像的颜色位数,1表示单色位图、4表示16色位图、8表示256色位图、24表示真彩色位图、32表示32位位图,默认情况下Windows不会处理最高8位,可以将它作为自己的Alpha通道;参数biCompression表示图像的压缩方式,BI_RGB表示无压缩、BI_RLE8表示行程编码压缩;参数biSizeImage表示实际的位图数据所占字节;参数biXPelsPerMeter表示目标设备的水平分辨率,单位是每米的像素个数;参数biYPelsPerMeter表示目标设备的垂直分辨率,单位是每米的像素个数;参数biClrUsed表示使用的颜色数(当biBitCount等于1、4、8时才有效),如果该项为0,表示颜色数为2^biBitCount;参数biClrImportant# 重要的颜色数,如果该项为0,表示所有颜色都是重要的。
(3)位图调色板
调色板实际上是一个数组,它的元素的个数由biBitCount和biClrUsed决定,对于位图文件来说,只有biBitCount等于1、4、8时才有调色板,它们对应的调色板的元素个数分别是2、16、256。调色板结构在VB中的声明如下:
Private Type RGBQUAD rgbBlue As Byte rgbGreen As Byte rgbRed As Byte rgbReserved As Byte End Type |
上述结构中,参数rgbBlue表示蓝色分量,参数rgbGreen 绿色分量;参数rgbRed表示红色分量;参数rgbReserved为保留位,设置为0既可。对于各个颜色的分量来说,它们分布在0-255之间,数值越大,亮度越大,反之则亮度越小。
需要说明的是,BITMAPINFOHEADER结构和调色板数据合在一起就构成了BITMAPINFO结构,这个结构在显示位图文件时能够用到。该结构在VB中声明如下:
Private Type BITMAPINFO bmiHeader As BITMAPINFOHEADER bmiColors(0 To 255) As RGBQUAD End Type |
(4)位图数据
对于位图文件来说,一行的图像数据叫做一个扫描行,一个扫描行的长度必须是4的倍数(字节),如果不是,则需要补齐。计算公式:LineBytes=((biWidth*biBitCount+31)And &HFFFFFFE0)\8,通常情况下DIB的扫描行是逆序存储的(相对于屏幕坐标系而言),即屏幕上的第一行是DIB位图数据的最后一行。对于256色位图来说,它用8bit表示一个像素的颜色索引,也就是说,位图显示时,根据当前索引值来到位图的调色板中确定该像素的颜色;对于真彩色图象来说,位图文件中没有调色板信息,它直接用24个bit位表示一个像素的颜色,每个字节表示一种基色,也就是R、G、B分量中的一个值,需要注意的是,真彩色位图文件中三个字节的排列顺序是BGR,而不是传统的RGB。