c++ - HBITMAP hbm = LoadImage函数返回NULL

标签 c++ visual-c++ bitmap null loadimage

我在屏幕上显示位图时遇到问题。当我编译并运行不显示任何内容时,尝试逐步调试,发现下面的代码是问题所在。

HBITMAP hbm = (HBITMAP)LoadImage(hInstance, 
                        "C:\\Users\\Jemma\\Desktop\\Maze Game\\Assets\\TILE_01.bmp", 
                        IMAGE_BITMAP, 
                        SWidth, SHeight, 
                        LR_LOADFROMFILE | LR_CREATEDIBSECTION); 
    if (hbm == NULL || m_Surface == NULL)
{
    DWORD lastError = GetLastError();
    return 1;
}

当我首先在autos下进入此功能时,它会说hbm = 0xcccccccc {unused = ???}(我假设这是由于未初始化,因为我上线时出现了此信息,所以我没有介入其中在这一点上-只是以为我会以防万一,如果我进入这一行,它说hbm = NULL,并且GetLastError函数返回0,我已经读过它意味着函数成功了。我尝试传递NULL而不是hInstance,尝试将文件名作为LPCSTR szFileName传递给我-我将其声明为LPCSTR szFileName(“C:\ Users \ Jemma \ Desktop \ Maze Game \ Assets \ TILE_01.bmp”) 。
绝对不知道下一步该怎么做。任何帮助,将不胜感激。

最佳答案

首先,请确保您的图片是真实的bmp文件,并且可以使用图片查看器打开。然后尝试使用LoadImage加载该HBITMAP:

const char* filename = "C:\\Users\\Jemma\\Desktop\\Maze Game\\Assets\\TILE_01.bmp";
HBITMAP bmp = (HBITMAP)LoadImage(NULL, filename,
    IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if (hbm == NULL)
{
    DWORD lastError = GetLastError();
    return 1;
}

注意,当使用LR_DEFAULTSIZE时,您需要使用0,0作为大小,从文件加载时,您也需要使用LR_LOADFROMFILE。所有这些都在documentation of LoadImage function中提到。

使用调试器逐步调试时,如果遇到意外情况,则需要检查GetLastError。如果您要逐步使用VS调试器,则只需在监视窗口中添加@err,您将始终看到最后一个错误,而无需更改代码。您也可以将其添加为@err,hr,它将为您显示所发生错误的可读描述。

关于c++ - HBITMAP hbm = LoadImage函数返回NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43507270/

相关文章:

c++ - 使用 std::min_element、std::max_element 查找 vector 中的最小和最大元素

c++ - 将数组从 C++ 构造函数传递给函数

c - MSVC 中的伪寄存器

c++ - 为什么我会收到 "invalid conversion from ' Queue*/Stack *' to ' int'"错误消息?

java - Android:位图到字节数组并返回:SkImageDecoder::Factory 返回 null

Java 的 setFilterBitmap 在 Objective-C 中等效

c++ - 使用 boost::spirit::x3 解析为 vector<boost::string_view>

c++ - 如何使用 winapi 在 windows 中获取当前事件窗口的进程名称?

c++ - 错误 C244 '{' : missing function header (old-style formal list?) Visual C++

android - BitmapFactory.decodeFile() 中的 OutOfMemoryError