【发布时间】:2010-11-11 04:01:03
【问题描述】:
我一直在使用带有 C++ 和 Visual C++ 2008 Express Edition 的 SFML 1.4(简单和快速多媒体库)来测试一些东西。为了避免在我的图形程序中使用外部图像,我正在使用一个简单的资源脚本加载位图资源来测试 sf::Image::LoadFromMemory(const char * Data, std::size_t SizeInBytes) 函数:
IDB_SPRITE BITMAP "sprite1.bmp"
在我加载图像以使用此位图资源创建sf::Image 的代码中,我使用以下过程,包括 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 以避免这样做?
【问题讨论】:
标签: c++ winapi bitmap resources