2012-07-06 193 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"