2012-07-06 102 views
2

我有一个简单的问题。我在我的C++程序中使用SDL和SDL_image,并且从单个PNG文件加载图像是很好的。SDL和Visual Studio 2010资源

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

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

试图

dot = load_image(MAKEINTRESOURCE(IDB_PNG1)); 

,但没有奏效。

回答

0

按照MAKEINTRESOURCEdocumentation

的返回值应该是仅使功能,其中明确表明,他们接受MAKEINTRESOURCE作为参数。

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

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"