我正试着在window上画一个位图文件。所以我使用(HBITMAP)LoadImage(),它返回NULL。我使用GetLastError查看问题,但它也返回0。我在做goorm ide(windows应用程序)。
HBITMAP hBitmap = NULL;
hBitmap = (HBITMAP)LoadImageW( NULL, L"C:\\Users\\Asd\\Downloads\\image.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
if(hBitmap == NULL){
DWORD errorCode = GetLastError();
if(errorCode != 0){
LPSTR messageBuffer = nullptr;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errorCode,
0,
(LPTSTR)&messageBuffer,
0,
NULL);
MessageBox(NULL, messageBuffer, "hBitmap is NULL!" , MB_OK);
}else{
MessageBox(NULL, "hBitmap is null but errorCode is 0", "???" , MB_OK);
}
}如果我将代码中的"image.bmp“更改为"asdf.bmp”,它会显示“没有文件”。因此,我确信它找到了文件,但似乎不能正常工作。当我打印位图的宽度和高度时,它显示奇怪的数字(如12312321,-3453453)。我找不到有什么问题。
我也试过了:(来自https://support.microsoft.com/en-us/help/158898/howto-how-to-use-loadimage-to-read-a-bmp-file)
hBitmap = (HBITMAP)LoadImage( NULL, "image.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );发布于 2019-09-30 10:55:00
我创建了最简单的Windows桌面应用程序。
并且只添加了WM_CREATE和WM_PAINT消息事件。
我添加了自己的bmp图像,可以成功加载该图像。
如下所示:
hBitmap = (HBITMAP)LoadImage(GetModuleHandle(NULL), L"C:\\Users\\strives\\Desktop\\panda.bmp", IMAGE_BITMAP, 0, 0,
LR_DEFAULTSIZE | LR_LOADFROMFILE);根据您在注释中的回答,您尝试使用绝对路径来加载图像,但您没有考虑到问题。这就是图像格式,如果您刚刚将JPG图像的后缀更改为.bmp,那么hBitmap将返回0,GetLasterror也将返回0。
因此,您所要做的就是使用格式正确的BMP图像。如果没有此类图片,请使用图片转换格式工具进行转换。
另外,我以前也遇到过类似的post,大家可以参考一下。
发布于 2021-03-21 01:40:35
这是通过BOOL LoadBitmap(UINT nIDResource)和一个由GIMP创建的bmp得到的。将资源bmp文件加载到Paint中,并执行一些伪更改以使Paint确信您更改了bmp。保存bmp。问题已经消失了!我没有深入钻研来找出根本原因。LoadBitmap不喜欢由GIMP创建的bmp文件。
https://stackoverflow.com/questions/58152337
复制相似问题