首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(位图)LoadImage()返回NULL,GetLastError()返回0

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

Stack Overflow用户
提问于 2019-09-29 12:56:02
回答 2查看 1.1K关注 0票数 0

我正试着在window上画一个位图文件。所以我使用(HBITMAP)LoadImage(),它返回NULL。我使用GetLastError查看问题,但它也返回0。我在做goorm ide(windows应用程序)。

代码语言:javascript
复制
    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)

代码语言:javascript
复制
hBitmap = (HBITMAP)LoadImage( NULL, "image.bmp", IMAGE_BITMAP, 0, 0,
               LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-30 10:55:00

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

并且只添加了WM_CREATEWM_PAINT消息事件。

我添加了自己的bmp图像,可以成功加载该图像。

如下所示:

代码语言:javascript
复制
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,大家可以参考一下。

票数 2
EN

Stack Overflow用户

发布于 2021-03-21 01:40:35

这是通过BOOL LoadBitmap(UINT nIDResource)和一个由GIMP创建的bmp得到的。将资源bmp文件加载到Paint中,并执行一些伪更改以使Paint确信您更改了bmp。保存bmp。问题已经消失了!我没有深入钻研来找出根本原因。LoadBitmap不喜欢由GIMP创建的bmp文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58152337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档