把資源加载到内存中 BMP 出错

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

posted @ 2014-04-24 11:59  夜雨無聲  阅读(511)  评论(0编辑  收藏  举报