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

 
在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位位图没有颜色表项,位图头信息后紧跟位图数据。

你可能感兴趣的:(windows,struct,扩展,byte,磁盘)