bmp图像数据包含四个部分:
- 列表内容
位图文件头
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
- 位图信息头
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;//指定BITMAPINFOHEADER结构大小,占4个字节,为40
LONG biWidth;//指定位图宽度,单位为像素,占4个字节,例如640*480图片,这里值就为640
LONG biHeight;//指定位图高度,占4个字节,例如前面的480
WORD biPlanes; //占2个字节,必须为1
WORD biBitCount;//指定像素位数,占2个字节,比如24位色这里就为24,16位色这里就为16,1位色,就是黑白照片。
DWORD biCompression;//指定位图的压缩类型,可以取如下值:BI_RGB、BI_RLE8、BI_RLE4,都是windows定义好的一些常量,BI_RGB表示不压缩
DWORD biSizeImage;//图片像素数据大小,单位为字节,如果图片是BI_RGB,那么这个字段可以设置为0
LONG biXPelsPerMeter;//目标设备水平分辨率
LONG biYPelsPerMeter;//目标设备垂直分辨率
DWORD biClrUsed;//指定位图实际用到的颜色数,如果为0,颜色数为2^biBitCount
DWORD biClrImportant;//指定重要颜色数,如果为0,表示所有颜色都是重要的。
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
- 颜色表
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;// rgbReserved保留,必须为0。
} RGBQUAD;
不过一般将位图像信息头和颜色表合并为一个结构体:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
- 位图数据
(待续)