【问题标题】:How to load a bitmap from a resource file (.rc file)?如何从资源文件(.rc 文件)加载位图?
【发布时间】:2017-08-04 10:44:49
【问题描述】:

我正在 Visual Studio 中编写一个简单的游戏,我已经设置了一个资源文件(.rc 文件),我也在使用 sdl2。我想知道是否有办法加载或绘制位于资源文件中的位图。提前致谢

我目前正在使用这条线:

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

如何使用 sdl2 渲染 hBtMpIMG?

【问题讨论】:

  • 有 Windows API 函数可以将所有可能的资源从嵌入式资源文件加载到内存中,并返回一个句柄。在您的情况下,如果您稍微搜索一下,您应该找到一个从资源加载位图并返回 HBITMAP hhandle 或类似的函数。然后,如果您再搜索一点,我相信您会找到一些东西来将 HBITMAP 转换为 SDL2 可以使用的东西。
  • 您可能需要将 HBITMAP 转换为 BITMAP 才能将其传递给 SDL。此外,SDL 是一种兼容性工具,可用于在 Windows 和其他操作系统中进行编程。如果您使用的是 Windows 特定功能,那么您不妨使用 Windows 功能打印位图。或者坚持使用 SDL 并从文件中加载位图。

标签: c++ visual-studio sdl-2


【解决方案1】:

您可以使用 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 创建窗口等,这仍然有效吗?
  • 你也可以在你的例子中加上DeleteObject(hBtMpBall),避免资源泄露。
  • @BarmakShemirani:是的,以避免资源耗尽。
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 2021-03-06
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多