如何从资源文件(.rc文件)加载位图?

问题描述:

我在Visual Studio中编程一个简单的游戏,我建立了一个资源文件(.rc文件),我也使用了sdl2。我想知道是否有一种方法来加载或绘制位于资源文件中的位图。在此先感谢如何从资源文件(.rc文件)加载位图?

我目前正在使用这条线

HBITMAP hBtMpIMG = LoadBitmap((HINSTANCE)getModuleHandle(_T("Project 1.exe")), MAKEINTRESOURCE(IDB_BITMAP1)); 

我将如何呈现hBtMpIMG使用SDL2?

+0

有一些Windows API函数可以将所有可能的资源从嵌入资源文件加载到内存中,并返回一个句柄。在你的情况下,如果你搜索一点点,你应该找到一个函数来从资源加载位图并返回一个'HBITMAP'句柄或类似的东西。然后,如果您再搜索一下,我相信您会发现将“HBITMAP”转换为SDL2可以使用的内容。 –

+0

您可能需要将'HBITMAP'转换为'BITMAP'才能将其传递到SDL。另外,SDL是一款兼容性工具,可用于在Windows和其他操作系统中进行编程。如果您使用的是Windows特定功能,那么您也可以使用Windows功能打印位图。或者坚持到SDL并从文件加载位图。 –

您可以使用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" 
    
+0

如果我使用SDL创建窗口等,这仍然有效吗? – MrMcSniper

+0

你可以在你的例子中添加'DeleteObject(hBtMpBall)',这是必要的,以避免资源泄漏。 –

+0

@BarmakShemirani:是的,以避免资源耗尽。 – Raindrop7