gpt4 book ai didi

c++ - 将位图作为 Windows 资源加载时,有没有办法保留 BITMAPFILEHEADER?

转载 作者:行者123 更新时间:2023-11-28 08:32:44 25 4
gpt4 key购买 nike

我一直在使用 SFML 1.4 测试一些东西(简单快速的多媒体库)带有 C++ 和 Visual C++ 2008 Express Edition。为了避免我的图形程序有外部图像,我正在测试 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 以避免这样做?

最佳答案

使用自定义资源类型将保留整个文件。更改资源脚本以使用 RCDATA 类型而不是 BITMAP 类型:

IDB_SPRITE RCDATA "sprite1.bmp"

在 FindResource 函数调用中,使用 RT_RCDATA 而不是 RT_BITMAP:

HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDB_SPRITE), RT_RCDATA);

更多信息:

RCDATA Resource

Resource Types

关于c++ - 将位图作为 Windows 资源加载时,有没有办法保留 BITMAPFILEHEADER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1134050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com