(位图)LoadImage() 返回 NULL,GetLastError() 返回 0

(Bitmap)LoadImage() returns NULL and GetLastError() returns 0

本文关键字:返回 GetLastError NULL 位图 LoadImage      更新时间:2023-10-16

我正在尝试在窗口上绘制位图文件。所以我使用了(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);
}
}

如果我将代码中的"图像.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 );

我创建了最简单的Windows桌面应用程序。

并且只添加了WM_CREATEWM_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图像。如果没有这样的图像,请使用图像转换格式工具进行转换。

另外,我之前遇到过类似的帖子,你可以参考。

使用 BOOL LoadBitmap(UINT nIDResource( 和 GIMP 创建的 bmp 得到了这个。将资源 bmp 文件加载到 Paint 中,并进行一些伪更改以说服 Paint 您更改了 bmp。保存 bmp。问题消失了!我没有更深入地钻研以找到根本原因。LoadBitmap 不喜欢 GIMP 创建的 bmp 文件。