本文博客链接: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这样排列数据的