BMP文件放到VS的資源中時,VS會將BMP的文件頭去掉,即BITMAPFILEHEADER,這個結構體去除。所以當加載BMP到內存中時,如果是使用GDI+或是其它解釋庫時,會解析失敗。
所以在讀取BMP資源時,需要加上BITMAPFILEHEADER結構體。
// pvResData 為已經讀入到內存的BMP數據。 //获得位图信息头 BITMAPINFOHEADER bmpInfoHdr; CopyMemory(&bmpInfoHdr, pvResData, sizeof(BITMAPINFOHEADER)); //获得位图颜色表中RGBQUAD结构的个数 long nColorEntries; switch(bmpInfoHdr.biBitCount) { case 1: nColorEntries = 2; break; case 4: nColorEntries = 16; break; case 8: nColorEntries = 256; break; default: nColorEntries = 0; } //根据位图信息头创建位图文件头 BITMAPFILEHEADER bmpFileHdr; bmpFileHdr.bfType = 0x4d42; // 'BM' bmpFileHdr.bfSize = sizeof(BITMAPINFOHEADER) + dwResSize; bmpFileHdr.bfReserved1 = bmpFileHdr.bfReserved2 = 0; bmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * nColorEntries; //写入位图文件头 //... // 再寫入 pvResData
參考:
http://blog.csdn.net/lyserver/article/details/2874366