SDL and Visual Studio 2010 resources

SDL and Visual Studio 2010 resources

本文关键字:2010 resources Studio Visual and SDL      更新时间:2023-10-16

我有一个简单的问题。我在 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的内容(顺便说一句,请在问题中包含您使用的函数的内容,您会得到更好的答案......)但我敢打赌它没有使用其参数来调用接受MAKEINTRESOURCE的 Windows SDK 函数之一......据我所知,这些资源应该保存一些特定的Windows UI数据,如鼠标光标,图标等。用于 Windows 函数,而不是与 SDL 等其他库一起使用,所以我并不惊讶它不起作用。