我在屏幕上显示位图时遇到问题。当我压缩并运行它没有显示任何东西,所以我尝试一步一步调试,发现下面的代码是问题。
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 \资产\ TILE_01.bmp&#34)。 绝对不知道下一步该尝试什么。对此的任何帮助将不胜感激。
答案 0 :(得分:0)
首先,确保您的图像是真正的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
,它会向您显示发生错误的可读描述。
答案 1 :(得分: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();