我正在尝试在窗口上绘制位图文件。所以我用了(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 );
答案 0 :(得分:0)
我创建了最简单的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,您可以参考。
答案 1 :(得分:0)
通过 BOOL LoadBitmap(UINT nIDResource) 和 GIMP 创建的 bmp 得到这个。将资源 bmp 文件加载到 Paint 并进行一些伪更改以说服 Paint 您更改了 bmp。保存 bmp。问题迎刃而解!我没有深入研究以找到根本原因。 LoadBitmap 不喜欢 GIMP 创建的 bmp 文件。