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位位图没有颜色表项,位图头信息后紧跟位图数据。
¬
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位位图没有颜色表项,位图头信息后紧跟位图数据。
相关文章推荐
- BITMAP,BITMAPINFOHEADER,PBITMAPINFO,HBITMAP,BITMAPFILEHEADER
- android那些事之Bitmap、InputStream、Drawable、byte[]、Base64之间的转换关系
- vfs的superblock、inode、dentry、file之间的关系
- BMP位图结构,及BITMAPINFOHEADER 与BITMAPFILEHEADER:
- IplImage CBitmap HBITMAP BITMAP之间的相互转换
- BITMAPFILEHEADER、BITMAPINFOHEADER及BMP结构详解
- BITMAPFILEHEADER、BITMAPINFOHEADER及BMP结构详解
- Bitmap与byte、file、Drawable之间的相互转换
- RMAN备份保留与control_file_record_keep_time之间的关系
- IPicture、BITMAP、HBITMAP和CBitmap的关系
- IplImage、CBitmap、HBITMAP、BITMAP之间的相互转换
- 浅析FILE和fd之间的关系
- tablespace和datafile之间的关系
- BITMAPFILEHEADER、BITMAPINFOHEADER及BMP结构详解
- HBitmap、Bitmap、CBitmap之间的区别与联系
- bitmap与file之间转换使用
- DataURL, Blob, File, Image之间的关系与转换
- HDFS中的file与block块之间的对应关系举例
- 内核编程struct file 与struct file_operations以及struct cdev之间的关系
- BITMAPFILEHEADER和BITMAPCOREHEADER区分