把資源加載到內存中 BMP 出錯

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

相關文章
相關標籤/搜索