我一直在使用测试一些东西SFML 1.4 http://sfml-dev.org/(简单快速的多媒体库)采用 C++ 和 Visual C++ 2008 Express Edition。为了避免我的图形程序出现外部图像,我正在测试sf::Image::LoadFromMemory(const char * Data, std::size_t SizeInBytes) http://www.sfml-dev.org/documentation/1.4/classsf_1_1Image.htm#72565ffabe12dfb2602e209c2e6f0486使用简单的资源脚本加载位图资源的函数:
IDB_SPRITE BITMAP "sprite1.bmp"
在我的代码中加载图像以创建sf::图像 http://www.sfml-dev.org/documentation/1.4/classsf_1_1Image.htm使用此位图资源,我使用以下过程,由 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 以避免这样做?