您的位置:首页 > 其它

BITMAP,BITMAPINFOHEADER,PBITMAPINFO,HBITMAP,BITMAPFILEHEADER之间的关系

2011-09-02 17:57 429 查看
在Windows系统中,以BMP 为扩展名的文件都是DIB文件,保存于磁盘中的DIB文件由4部分所组成:位图文件头、位图信息头、颜色表项和位图图象数据。管理位图文件头、位图信息头、颜色表项的3个结构分别为 BITMAPFILEHEADER,BITMAPINFOHEADER,和RGBQUAD,其中RGBQUAD和BITMAPINFOHEADER结构又可以通过BITMAPINFO来组合。图1-1 展示了DIB文件的数据组织

¬

BITMAPFILEHEADER结构的定义如下

typedef struct tag BITMAPFILEHEADER{

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

}BITMAPFILEHEADER;

其中bfType说明文件为一个位图文件,表示位图的ASCII码为BM,其16进制表示为0x4D42。bfSize 表示以字节为单位的文件大小。bfReserved1和bfReserved2一般不采用,其值均为0。BfOffBits表示从位图文件头开始到位图数据段的字节总数,即字节偏移量。

BITMAPINFOHEADER结构的定义如下:

typedef struct tag BITMAPINFOHEADER{

DWORD biSize;

DWORD biWidth;

DWORD biHeight;

WORD biPlanes;

WORD biBitCount;

DWORD biCompression;

DWORD biSizeImage;

DWORD biXPelsPerMeter;

DWORD biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

}BITMAPINFODEADER;

其中,biSize 表示该结构的大小。biWidth 表示以像素为单位的位图宽度。biHeight表示相应的高度,biPlanes 表示目标设备的位平面数,置为1。biBitCount 表示位图每个像素的位数,可能为1、4、8、或24。iCompression 表示位图的被压缩类型。若位图未被压缩,则该值为0;若为1,则表示采用RLE(Run Length Encoded)8压缩;若位2,则表示采用RLE4压缩。biSizeImage 表示被压缩位图的字节数。biXPelsPerMeter
表示目标设备的水平分辨率,biYPelsPerMeter表示目标设备的垂直分辨率。biClrUsed 表示位图实际使用的颜色数。biClrImportant 指对于显示该位图比较重要的颜色索引的个数,若该值尾0,则表示所有的颜色都是重要的。

RGBQUAD结构的定义如下:

typedef struct tagRGBQUAD{

BYTE rgbBLUE;

BYTE rgbGREEN;

BYTE rbgRED;

BYTE rgbReserved;

}RGBQUAD;

其中,rgbBLUE、 rgbGREEN、rbgRED分别表示蓝、绿、红分量;rgbReserved的值为0。

BITMAPINFO结构把BITMAPINFOHEADER结构和一张颜色表结合在一起,其定义如下:

tyepdef struct tagBITMAPINFO{

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

}BITMAPINFO;

事实上,只有1、4、8位位图才有颜色表项。24位位图没有颜色表项,位图头信息后紧跟位图数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: