首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HBITMAP hbm=LoadImage函数返回NULL

HBITMAP hbm=LoadImage函数返回NULL
EN

Stack Overflow用户
提问于 2017-04-20 06:40:20
回答 2查看 3.4K关注 0票数 1

我在屏幕上显示位图时遇到问题。当我编译并运行时,它没有显示任何东西,所以我一步一步地尝试调试,发现下面的代码是问题所在。

代码语言:javascript
复制
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\hInstance\Desktop\Maze Game\Assets\TILE_01.bmp")。完全不知道下一步该怎么做。在这方面的任何帮助都将非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2017-04-20 07:23:08

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

代码语言:javascript
复制
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,它将向您显示所发生的错误的可读描述。

票数 1
EN

Stack Overflow用户

发布于 2021-01-11 18:22:14

代码语言:javascript
复制
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 (bmp== NULL)
{
    DWORD lastError = GetLastError();
    return 1;
}

I am using the same code as above mentioned but LoadImage() is returning NULL and getting lasterror =2 , even i am sure file is already there from belowcode:

string filePath = "D:\\ACC_car_Ego.bmp";
    if (boost::filesystem::exists(filePath))    // does filePath actually exist?
        DWORD lastError = GetLastError();
    else
        DWORD lastError1 = GetLastError();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43507270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档