我在屏幕上显示位图时遇到问题。当我编译并运行时,它没有显示任何东西,所以我一步一步地尝试调试,发现下面的代码是问题所在。
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")。完全不知道下一步该怎么做。在这方面的任何帮助都将非常感谢。
发布于 2017-04-20 07:23:08
首先,确保您的图像是真实的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,它将向您显示所发生的错误的可读描述。
发布于 2021-01-11 18:22:14
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();https://stackoverflow.com/questions/43507270
复制相似问题