直接显示时,按如下写入:(不将BMPFILEHEADER写入)
m_hDIB=(HDIB)::GlobalAlloc(GHND, sizeof(BITMAPINFOHEADER)+ 1024+bmpinfohead.biSizeImage);
LPSTR lpDIB = (LPSTR) ::GlobalLock(m_hDIB);memcpy(lpDIB,&bmpinfohead,sizeof(BITMAPINFOHEADER));
memcpy(lpDIB+sizeof(BITMAPINFOHEADER),palette,1024);
memcpy(lpDIB+sizeof(BITMAPINFOHEADER)+1024,pByteData,bmpinfohead.biSizeImage);
::GlobalUnlock(m_hDIB);
而保存bmp文件时,需要再在前面添加写入BMPFILEHEADER信息。
其中,//BMP 文件头的初始化(默认不需改动)
bmpfilehead.bfType = 19778;//即“BM”
bmpfilehead.bfSize = DIBSize;
bmpfilehead.bfReserved1 = 0;
bmpfilehead.bfReserved2 = 0;
bmpfilehead.bfOffBits = 1078;//从文件头至数据区的偏移量
//BMP 信息头的初始化
bmpinfohead.biSize = 40;
bmpinfohead.biWidth = (图像宽)
bmpinfohead.biHeight = (图像高)
bmpinfohead.biBitCount = 8;
bmpinfohead.biPlanes = 1;
bmpinfohead.biCompression = 0;
bmpinfohead.biClrUsed = 0 ;
bmpinfohead.biClrImportant = 0;
bmpinfohead.biSizeImage = bmpinfohead.biHeight * bmpinfohead.biWidth;
bmpinfohead.biXPelsPerMeter = 1000 /3.26;
bmpinfohead.biYPelsPerMeter = 1000/3.26;