c++ - SDL 和 Visual Studio 2010 资源

标签 c++ resources sdl

我有一个简单的问题。我在我的 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"

关于c++ - SDL 和 Visual Studio 2010 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11364095/

相关文章:

macos - 在 OSX (Macbook Air 2012) 上使用 SDL2 创建 OpenGL 3.x 上下文

c++ - 为什么不调用虚函数?

c++ - 定义模板化运算符重载时出错

c++ - 如何使用按钮 'backspace'

java - 无法重命名 Eclipse 插件(无法解析插件)

c++ - C++ 程序和 SDL 中的 main() 冲突

c++ - 是否有用于 SDL 的 C++ 包装器/绑定(bind)?

c++ - 如果我编写一段代码,其中每个线程修改数组的完全不同部分,这会保持缓存一致性吗?

JSF 2.0——跨集群共享或Prime OmniFaces组合资源缓存

java - 我应该如何在 Java 中使用 getResource()?