2

我有一个简单的问题。我在我的 c++ 程序中使用 SDL 和 SDL_image,并且可以从单个 png 文件中加载图像。

SDL_Surface *dot = NULL;
dot = load_image("dot.png");

但是,如果我将 png 文件添加到资源中,我该如何加载它呢?所以我不想存储在 exe 旁边的 png 文件中。是否可以从资源中加载?

试过了

dot = load_image(MAKEINTRESOURCE(IDB_PNG1));

但它没有用。

4

2 回答 2

2

完全可以将图像或其他内容从 Windows 资源加载到 SDL。为此,您需要获取原始数据并将其传递给适当的 RWOPS。

HMODULE hModule = GetModuleHandle(_T("myapp.exe"));

HRSRC hWhite = FindResource(hModule, MAKEINTRESOURCE(IDB_WHITE_PNG), _T("PNG"));            
unsigned int white_size = SizeofResource(hModule, hWhite);
HGLOBAL hgWhite = LoadResource(hModule, hWhite);
unsigned char* white_data = (unsigned char*)LockResource(hgWhite);

SDL_Surface* white = IMG_Load_RW(SDL_RWFromConstMem(white_data, white_size), 1);

这假设您的 *.rc 文件中有类似的内容:

IDB_WHITE_PNG  PNG "White.png"
于 2014-06-21T16:34:45.180 回答
0

根据MAKEINTRESOURCE 文档

返回值应仅传递给明确指示它们接受 MAKEINTRESOURCE 作为参数的函数。

您没有给出load_image(顺便说一句,请包括您在问题中使用的函数的内容,您会得到更好的答案......)但我敢打赌它没有使用它的参数来调用 Windows SDK 函数之一接受MAKEINTRESOURCE...据我所知,这些资源应该包含一些特定的 Windows UI 数据,如鼠标光标、图标等。用于 Windows 功能,而不是 SDL 等其他库,所以我并不感到惊讶不起作用。

于 2012-08-10T13:31:07.567 回答