【问题标题】:I cannot load image from folder using win32我无法使用 win32 从文件夹加载图像
【发布时间】:2019-11-07 05:31:53
【问题描述】:

我是win32的新手。我将位图图像“logo2.bmp”放入 .vcxproj 所在的目录中。但是,当我使用 LoadImage() 函数时,似乎没有加载任何内容。

我在网上查了我的问题,但是修改后图片仍然无法加载。

void AddControls(HWND hwnd)
{
//some code
    hLogo = CreateWindowW(L"Static", NULL, WS_VISIBLE | WS_CHILD | SS_BITMAP,
                                 350, 60, 100, 100, hwnd, NULL, NULL, NULL);
    if (hLogoImage != NULL)
    {
        SendMessage(hLogo, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hLogoImage);
    }
    else
    {
        MessageBox(0, L"Could not load image", L"Error", MB_OK);
    }
}

void loadImages()
{
    hLogoImage = (HBITMAP)LoadImage(NULL, L"logo2.bmp", IMAGE_BITMAP,
                                      0,0,LR_LOADFROMFILE | LR_DEFAULTSIZE);
}

我希望输出是在 windows 上成功显示的位图图像,但是显示了“错误”文本框并且没有显示图片。

【问题讨论】:

  • LoadImage返回NULL,GetLastError返回什么。如果是“找不到文件”,当前目录是什么? logo2.bmp 是否存在于该目录中?
  • 请阅读您的第二句话。您是否从 Visual Studio 运行此代码?如果是这样,我认为当前目录是包含 .exe 的目录。
  • 这里提出的大多数关于 winapi 的问题都包含不包括错误检查的代码。不管您的代码实际上有什么问题,对您来说最大的教训是,您必须学会在使用 Windows API 时检查错误。
  • 没有任何理由永远在代码中使用相对路径名。 总是构造一个完全限定的路径名​​,如果你不希望你的代码在你无法控制的环境下改变它的含义。
  • 我并不是建议您使用 absolute 路径。我建议您构建一个完全限定路径。该路径可以相对于已知位置构建(如可执行映像的路径,可通过GetModuleFileName 获得)。你得到的警告很清楚:至少有一条路径通过你的窗口过程,它不返回值。修复它。

标签: c++ visual-studio winapi loadimage hbitmap


【解决方案1】:

编辑:好的,我知道这是文件格式的问题。我最好多学习。

【讨论】:

  • 您的 .bmp 文件在工作和不工作时的大小是多少?
  • 原图:bmp 格式,大小:108 KB 新图:bmp 格式,1 KB
  • 无论如何,非常感谢大家提醒我很多事情,包括getlasterror()
  • LoadImage 在加载大小仅为 100k 的位图图像时没有问题。您的初始位图更有可能违反 BMP 文件格式。许多应用程序写入无效的 BMP 文件。为了验证这一点,将图像加载到 MS Paint 中,然后从那里保存。这将始终生成有效的 BMP 文件。无论如何,这个提议的答案无法分析这个问题。它没用,而且外壳看起来很烦人。
  • 我明白了,非常感谢您的评论!我会删除答案,谢谢你提醒我!
猜你喜欢
  • 2021-05-19
  • 2011-07-07
  • 2018-09-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2012-07-28
相关资源
最近更新 更多