结构之困惑:
看书的时候,bmp的几个结构还算搞的明白,但是越来越糊涂了 2种结构 又出来个BITMAPINFO结构
现在要发奋把这个bmp结构搞清楚
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
首先是位图文件头BITMAPFILEHEADER。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
然后是位图信息头BITMAPINFOHEADER结构。
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
再然后是色彩表RGBQUAD结构。
最后就是位图的像素数据了。
=====================================================================
BITMAPINFO结构
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;
它是将位图信息头和色彩表合在一起的一个结构。
这样一个完整的bmp文件就是这样构成:
BITMAPFILEHEADER
BITMAPINFO
位图像素数据
原来以为多复杂。。。实际就是这样简单。
----------------------------------------------------------
----------------------------------------------------------
另外还有一种OS/2兼容的bmp格式,它使用了BITMAPCOREINFO结构。
bmp构成为:
BITMAPFILEHEADER
BITMAPCOREINFO
位图像素数据
其中BITMAPCOREINFO结构为:
typedef struct _BITMAPCOREINFO {
BITMAPCOREHEADER bmciHeader;
RGBTRIPLE bmciColors[1];
} BITMAPCOREINFO, *PBITMAPCOREINFO;
这种格式一般用的不多,不过要操作一个已有的BMP文件时,最好判断一下是哪种。