BMP文件放到VS的資源中時,VS會將BMP的文件頭去掉,即BITMAPFILEHEADER,這個結構體去除。因此當加載BMP到內存中時,若是是使用GDI+或是其它解釋庫時,會解析失敗。.net
因此在讀取BMP資源時,須要加上BITMAPFILEHEADER結構體。server
// 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
參考:blog
http://blog.csdn.net/lyserver/article/details/2874366it