(位图)LoadImage() 返回 NULL,GetLastError() 返回 0
(Bitmap)LoadImage() returns NULL and GetLastError() returns 0
我正在尝试在窗口上绘制位图文件。所以我使用了(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_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图像。如果没有这样的图像,请使用图像转换格式工具进行转换。
另外,我之前遇到过类似的帖子,你可以参考。
使用 BOOL LoadBitmap(UINT nIDResource( 和 GIMP 创建的 bmp 得到了这个。将资源 bmp 文件加载到 Paint 中,并进行一些伪更改以说服 Paint 您更改了 bmp。保存 bmp。问题消失了!我没有更深入地钻研以找到根本原因。LoadBitmap 不喜欢 GIMP 创建的 bmp 文件。
- GetLastError()从FtpPutFile()返回错误6
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- GetLastError 在调用 WinHttpOpenRequest 后返回 6
- WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0
- GetModuleFilenameEx返回0,getlasterror返回溢出错误.我究竟做错了什么
- Windows GDI API是否在GetLastError中返回错误代码
- DoModal 返回 -1 Getlasterror 说句柄无效
- LoadLibraryW 返回 nullptr,GetLastError() 返回3221225619
- InternetQueryOption(.) 失败,GetLastError() 始终返回 122 (ERROR_INS
- createprocess返回0,getlasterror设置为2
- 为什么GetLastError()根据调用方式返回0或2 ?
- 我没有看到注册表项,即使GetLastError返回全部0
- 只有在使用消息模式时,GetLastError()才会在调用PeekNamedPipe后返回ERROR_BROKEN_P
- Windows GDI上下文-函数失败,GetLastError()返回0
- 托管c++中奇怪的GetLastError返回
- c++ Win32.SelectObject失败,GetLastError返回错误1400(无效窗口句柄)
- GetLastError在SystemParametersInfo中返回错误2
- 尽管返回 true 但 SymInitialize 将 GetLastError 设置为 2,这意味着这一切
- LoadCursorFromFile返回NULL.GetLastError也是0
- CreateProcess()函数.GetLastError()返回3