我一直在使用C++和Visual C++ 2008 Express Edition使用SFML 1.4(簡單和快速的多媒體庫)測試幾件事。爲了避免與我的圖形程序外部圖片,我被檢驗出sf::Image::LoadFromMemory(const char * Data, std::size_t SizeInBytes)功能與位圖資源使用一個簡單的資源腳本加載:當將Bitmap加載爲Windows資源時,有沒有辦法保留BITMAPFILEHEADER?
IDB_SPRITE BITMAP "sprite1.bmp"
在我的代碼加載圖像使用此位圖資源創建一個,我用下面的方法,包括Win32 API函數(我已經排除了檢查,以確保Win32函數不返回NULL來縮短這個有點代碼):
HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDB_SPRITE), RT_BITMAP);
HGLOBAL hResData = LoadResource(NULL, hResInfo);
char * resourceData = reinterpret_cast<char *>(LockResource(hResData));
在那之後,我用sf :: Image :: LoadFromMemory功能:
MyImage.LoadFromMemory(resourceData, SizeofResource(NULL, hResInfo));
但是,這不起作用(我得到一個未知的文件類型錯誤)。經過一些測試後,我發現傳遞給LoadFromMemory函數的位圖數據不包含BITMAPFILEHEADER(前14個字節),我相信這是導致未知文件類型錯誤的原因。
我可以手動恢復BITMAPFILEHEADER並使LoadFromMemory函數正常工作。 但是,我想知道是否有某種方法來保存資源數據中的BITMAPFILEHEADER以避免這樣做?
改爲使用標準RT_RCDATA資源類型。存儲原始數據是它的意思。 – 2009-07-16 00:18:01