1

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

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") . 完全不知道接下来要尝试什么。对此的任何帮助将不胜感激。

4

2 回答 2

1

首先,确保您的图像是真正的 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;
}

请注意,当您使用 时,您需要使用 0, 0 作为尺寸LR_DEFAULTSIZE,此外,当从您需要使用的文件加载时,您需要使用LR_LOADFROMFILE. 所有这些都在LoadImage 函数的文档中提到。

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

于 2017-04-19T23:23:08.183 回答
0
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();
于 2021-01-11T10:22:14.287 回答