我有一个简单的问题。我在我的 c++ 程序中使用 SDL 和 SDL_image,并且可以从单个 png 文件中加载图像。
SDL_Surface *dot = NULL;
dot = load_image("dot.png");
但是,如果我将 png 文件添加到资源中,我该如何加载它呢?所以我不想存储在 exe 旁边的 png 文件中。是否可以从资源中加载?
试过了
dot = load_image(MAKEINTRESOURCE(IDB_PNG1));
但它没有用。
完全可以将图像或其他内容从 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"
根据MAKEINTRESOURCE
文档:
返回值应仅传递给明确指示它们接受 MAKEINTRESOURCE 作为参数的函数。
您没有给出load_image
(顺便说一句,请包括您在问题中使用的函数的内容,您会得到更好的答案......)但我敢打赌它没有使用它的参数来调用 Windows SDK 函数之一接受MAKEINTRESOURCE
...据我所知,这些资源应该包含一些特定的 Windows UI 数据,如鼠标光标、图标等。用于 Windows 功能,而不是 SDL 等其他库,所以我并不感到惊讶不起作用。