2017-08-04 84 views
-1

我在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並從文件加載位圖。 –

回答

0

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