如何从资源文件(.rc文件)加载位图?
我在Visual Studio中编程一个简单的游戏,我建立了一个资源文件(.rc文件),我也使用了sdl2。我想知道是否有一种方法来加载或绘制位于资源文件中的位图。在此先感谢如何从资源文件(.rc文件)加载位图?
我目前正在使用这条线:
HBITMAP hBtMpIMG = LoadBitmap((HINSTANCE)getModuleHandle(_T("Project 1.exe")), MAKEINTRESOURCE(IDB_BITMAP1));
我将如何呈现hBtMpIMG使用SDL2?
您可以使用API:LoadBitmap
加载存储在可执行文件的位图:
case WM_CREATE:
{
HBITMAP hBtMpBall = LoadBitmap((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDB_BALL)); //Here we have to use the executable module to load our bitmap resource
//this means that this resource "ball.bmp" is compiled and stored in the executable module"
//however if you use loadimage you can ignore this module and makeit null because you are laoding from file
if(!hBtMpBall)
MessageBox(0,"ball.bmp not found!",0,0);
}
break;
-
在资源文件:
.rc
你可能有这样的:#include "myres.h" IDB_BALL BITMAP DISCARDABLE "ball.bmp"
如果我使用SDL创建窗口等,这仍然有效吗? – MrMcSniper
你可以在你的例子中添加'DeleteObject(hBtMpBall)',这是必要的,以避免资源泄漏。 –
@BarmakShemirani:是的,以避免资源耗尽。 – Raindrop7
有一些Windows API函数可以将所有可能的资源从嵌入资源文件加载到内存中,并返回一个句柄。在你的情况下,如果你搜索一点点,你应该找到一个函数来从资源加载位图并返回一个'HBITMAP'句柄或类似的东西。然后,如果您再搜索一下,我相信您会发现将“HBITMAP”转换为SDL2可以使用的内容。 –
您可能需要将'HBITMAP'转换为'BITMAP'才能将其传递到SDL。另外,SDL是一款兼容性工具,可用于在Windows和其他操作系统中进行编程。如果您使用的是Windows特定功能,那么您也可以使用Windows功能打印位图。或者坚持到SDL并从文件加载位图。 –