【问题标题】:Drawing Image using WinAPI: LoadBitmap works but LoadImage() won't?使用 WinAPI 绘制图像:LoadBitmap 有效,但 LoadImage() 无效?
【发布时间】:2013-01-08 13:40:13
【问题描述】:

我是 Windows 编程的新手,一直在关注 Forger 的 Win32 API 编程教程。我一直在尝试在窗口内绘制图像。

查看了类似的问题,这段代码似乎对于加载位图是正确的:

HBITMAP testImage == NULL;
case WM_CREATE:
    testImage = (HBITMAP)LoadImage(NULL, L"C:\\ScreenSnip.bmp", IMAGE_BITMAP, 498, 304, LR_LOADFROMFILE);
    if(testImage == NULL) {
        MessageBox(NULL, L"NO IMAGE LOADED!", L"Error!",  MB_ICONEXCLAMATION | MB_OK);
    }
break;

我在上面的位置有一个名为 ScreenSnip.bmp 的图像,它的尺寸是 498*304。但是,LoadImage 不起作用,并且 testImage 的值始终为 null。

我曾尝试使用 LoadBitmap() 将图像作为资源加载,这很有效,这就是我没有包含其余代码的原因。似乎是上面的 LoadImage() 导致了问题,但我不知道为什么。

有人有什么想法吗?我在 Windows 7 64 位上使用 VC++ 运行它。

【问题讨论】:

  • 您是否尝试过将cxDesiredcyDesired 设置为零?文档中没有任何迹象表明这些“所需大小”参数允许用于图标或光标以外的任何内容。
  • 如果函数失败,返回值为NULL。要获取扩展错误信息,请调用 GetLastError。
  • 谢谢@chris - 我使用了GetLastError,它给我的值为0。我找到了this question,我认为那里的建议可能正是我想要的。感谢您的帮助!
  • LoadImage api只适用于未压缩的位图文件,请检查您要加载的位图文件是否未使用RLE编码压缩。
  • 您是在 LoadImage 之后立即调用 GetLastError 还是先调用 MessageBox?

标签: c++ winapi visual-c++ bitmap loadimage


【解决方案1】:

使用testImage = (HBITMAP)LoadImage(NULL, L"C:\\ScreenSnip.bmp", IMAGE_BITMAP, 498, 304, LR_LOADFROMFILE); 你使用宽 L"C:.." 所以你必须使用 LoadImageW

【讨论】:

  • 如果他不小心传递了一个WCHAR*,而应该是char*,他会得到一个编译错误。
猜你喜欢
  • 2013-09-01
  • 2019-02-08
  • 1970-01-01
  • 2015-09-12
  • 2013-08-26
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多