BMP文件结构

来源:互联网 发布:linux socket 模型 编辑:程序博客网 时间:2024/06/05 20:41

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

因为用到的只是24位图,所以文章也尽限于此。

 

24位图结构:文件头,信息头,位图数据   

 

文件头:       

typedef __packed struct    tagBITMAPFILEHEADER                                                                           {
       WORD bfType;//文件标志,2个字节。
       DWORD bfSize;//文件大小,4个字节
       WORD bfReserved1;//保留,2个字节
       WORD bfReserved2;//保留,2个字节
       DWORD bfoffBits;//位图偏移量,4个字节
}BITMAPFILEHEADER;


说明:

1.paceke为使结构体变量在内存中紧凑排列的说明符,不是标准C写法,ADS1.2中可以使用。

2.BMP文件在硬盘中是以小端模式存储的。

3.位图偏移量值的是从文件头0x0直接偏移到正文部分

 

信息头:

typedef __packed struct tagBITMAPINFOHEADER

{
 DWORD biSize;//信息头大小,4个字节
 DWORD biWidth;//位图宽度,4个字节
 DWORD biHeight;//位图高度,4个字节
 WORD  biPlanes;////位图的位面数(1),2个字节
 WORD  biBitCount;//每个像素点所需的数据位数(24),2个字节

 DWORD biCompression;//压缩算法,4个字节

 DWORD biSizeImage;//位图数据字节数,4个字节
 DWORD biXPeIsPerMeter;//以像素/米的单位表示水平分辨率,4个字节
 DWORD biYPeIsPerMeter;//以像素/米的单位表示垂直分辨率,4个字节
 DWORD biClrUsed;//位图使用的颜色数,4个字节
 DWORD biClrImportant;//指定重要颜色数
} BITMAPINFOHEADER;

 

位图数据

//颜色表数据结构,即调色板数据
typedef __packed struct tagRGBQUAD
{
 BYTE rgbBlue :8;    //RGB 蓝 
 BYTE rgbGreen :8;    //RGB 绿
 BYTE rgbRed :8;     //RGB 红
 //BYTE rgbReserved :8;   //保留,24位BMP不需要这一位
}RGBQUAD;

在位图数据中是BLUE GREEN RED这样排列数据的