【问题标题】:Windows GDI Context- LoadImage and GetLastError()Windows GDI 上下文- LoadImage 和 GetLastError()
【发布时间】:2011-12-18 08:29:24
【问题描述】:

在我的程序的第一步中调用LoadImage() 返回NULL。紧随其后,GetLastError() 被调用,它出乎意料地返回 0。 我想知道为什么LoadImage() 失败了,因为GetLastError() 清楚地表明在失败的函数之后没有设置错误代码。 这是一个sn-p的代码:

if ( (hbitmap = (HBITMAP) LoadImage(hThisInstance, MAKEINTRESOURCE(MY_BITMAP), 
                                    IMAGE_BITMAP, 0, 0, 
                                    LR_CREATEDIBSECTION)) == NULL) 
    printf("Last error: %d\n", GetLastError());

使用 HBITMAP hbitmap、HINSTANCE hThisInstance(WinMain 的参数)和 MY_BITMAP 是有效的位图资源。

【问题讨论】:

  • 嗯...FindResourcereturn 为该位图做什么?
  • 如果 LoadImage() 返回 NULL,只有在调用 GetLastError() 之前调用另一个 API 函数并清除当前错误代码时,GetLastError() 才能返回 0。 GetLastError() 仅在失败的函数之后才有意义。这让我觉得发布的代码不是真正使用的代码。
  • 您要么在 Windows 中发现了一个错误,要么我们没有查看真正的代码。考虑到非常无用的错误报告,尤其是在 GUI 应用程序中,我只会在“不是真正的代码”上付出代价。
  • 我在它之后立即调用它。为什么我不应该发布整个有意义的代码?我已经为此困扰了太多小时,我想了解为什么它不起作用。说实话,曾经也发生过类似的事情,叫做 CreateDIBSection(在另一个程序中),以同样的方式处理错误。
  • 请求的大小是0 x 0 像素,而您没有请求LR_DEFAULTSIZE,这是本意吗?

标签: c++ winapi gdi


【解决方案1】:

显然,LoadImage 返回NULL 并且在文件格式出现问题时不会设置任何错误。

可以在here 找到我尝试加载的位图副本。我使用 GIMP 创建了它,在当前版本中它有很多错误。

解决方案是在 Paint 中打开文件并再次保存。现在LoadImage 加载图像没有任何抱怨。

【讨论】:

  • 很奇怪。你打电话给GetLastError?它返回了什么? 0?
  • 使用 GIMP v2.8.6 或更高版本导出时,从“将图像导出为 BMP”对话框的“兼容性”选项树视图中选择“不写入色彩空间信息”...
【解决方案2】:

我发现最新版本的 GIMP 的行为完全相同。 当您从 Gimp 导出时,选择兼容性选项 [+] 按钮并选中“不写入颜色空间信息”复选框,位图将使用 LoadImage 加载确定。编辑:我现在看到了先前的评论,否则我可能不会打扰写作!

【讨论】:

  • 我没有使用 GIMP 创建图像,但事实证明我确实需要在 GIMP 中打开它并在没有颜色空间的情况下重新导出,以便 LoadImage 接受文件。谢谢你在这里得到了回答,否则很难找到。
猜你喜欢
  • 2023-03-03
  • 2011-12-18
  • 2011-12-17
  • 1970-01-01
  • 2011-12-11
  • 2020-01-28
  • 2023-03-25
  • 2010-09-29
  • 1970-01-01
相关资源
最近更新 更多