当确定文件是一副bmp图像后,就可以读取它的信息头BITMAPINFOHEADER。其时,前面对CFile操作的从程序,已经将整个文件读到了内存中,并用pBuffer指针指向它的首地址。
该文件在内存中的存储状态如下图所示
也就是说,pBuffer加上BITMAPFILEHEADER的长度,就是BITMAPINFOHEADER的首地址。
BITMAPINFOHEADER * pBIH = ( BITMAPINFOHEADER * ) (pBuffer + sizeof( BITMAPFILEHEADER ));
然后就可以获得诸如位图色深(以得知调色板的大小,对于24、32bit的图像,不存在调色板),图像长、宽等信息。比如:
int nWidth = pBIH->biWidth;
按说,pBuffer加上文件信息的长度,就指向了位图数据区,但BITMAPFILEHEADER中提供了一个元素:bfOffBits,就是从文件起始处到数据区的偏移量。
BYTE pBitBuffer = pBuffer + pBFH->bfOffBits;
这样,就可以通过pBitBuffer来操作位图了