结构之困惑:
看书的时候,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文件时,最好判断一下是哪种。