DIB(Device Independent Bitmap)设备无关位图,自带颜色信息,使调色板的管理非常轻松,可以在不同的显示设备上显示。它通常是以BMP的形式被保存在磁盘中或是以资源保存 在EXE或DLL文件中。
一个BMP文件大体分为以下四个部分。文件信息头,位图信息头,调色板,图像数据信息。
文件信息头是一结构体组成:
Typedef struct tagBITMAPFILEHEADER{
WORD bfType; 文件类型
DWORD bfSize; 文件大小
WORD bfReserved1; 保留字
WORD bfReserved2;
DWORD btOffBits; 从文件头到实际的位图数据的偏移字节数
}BITMAPFILEHEADER
位图信息头也是一结构体组成:
Typedef struct tagBITMAPINFOHEADER{
DWORD biSize; 指定这个结构的长度
LONG biWidth; 指定图像的宽度
LONG biHeight; 指定图像的高度
WORD biplanes; 必须是1
WORD bitBitCount; 指定 表示颜色时要用到的位数
DWORD biCompression; 指定位图是否压缩
DWORD biSizeImage; 指定实际的位图数据占用的字节数
LONG biXPelsPerMeter; 指定目标设备的水平分辨率
LONG biYPelsPerMeter; 垂直分辨率
DWORD biClrUsed; 指定本图像实际用到的颜色数
DWORD biClrImprotant; 指定本图像中重要的颜色数
}BITMAPINFOHEADER
调色板是由一数组组组成,数组中每个数值是一个tagRGBQUAD结构体,数组的大小等于位图颜色数的多少,即2的bitBitCount次幂。如是真彩图就没有调色板信息,直接就是接下来的图像数据信息。
Typedef struct tagRGBQUAD{
BYTE rgbBlue; 颜色的蓝色分量
BYTE rgbGreen; 绿色分量
BYTE rgbRed; 红色分量
BYTE rgbReserved; 保留值
}RGBQUAD;
图像数据信息:如不是真彩图,数据信息就是图像中像素的颜色信息,就是调色板的索引值;如果是真彩图,就直接是实际的R,G,B值。