【发布时间】:2014-11-27 08:43:22
【问题描述】:
我正在尝试使用 c++ 中的以下函数读取 bmp 文件
HANDLE hBmp = LoadImage(0, L"C:\\Users\\abhinay\\Desktop\\Sample.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
在我的场景中,sample.bmp 是由第三部分 QRCode 库生成的 QRCode。当我尝试读取使用上述“LoadImage”函数生成的 QRCode 时,我将 hBmp 设为“NULL”。
我用 MS Paint 打开 QRCode 图像“sample.bmp”并将其保存为 24 位位图中的 .bmp,现在我可以使用上述相同的“LoadImage”函数加载文件。
你能帮忙解释一下为什么在第一种情况下没有加载 bmp 文件吗?我怎样才能使用“LoadImage”函数正确加载生成的 QRCode 图像,而无需使用转换为 24 位位图图像女士油漆。另外让我知道打印 .jpg 或 .png 图像而不是 .bmp 文件是否容易。
谢谢 阿比奈
编辑 我试过使用下面提到的“GetLastError()”
HANDLE hBmp = LoadImage(NULL, bmpfile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBmp == NULL)
{
DWORD dw = GetLastError();
if (dw == NULL)
{
MessageBoxA(NULL, "get last error is null", "ABHINAY", MB_OK | MB_TOPMOST);
}
else
{
MessageBoxA(NULL, "get last error is not null", "ABHINAY", MB_OK | MB_TOPMOST);
}
}
我收到错误消息“get last error is null”。
【问题讨论】:
-
msdn.microsoft.com/en-us/library/windows/desktop/…: "如果函数失败,返回值为NULL。获取扩展错误信息,调用GetLastError"
-
嗨,我已经尝试使用“GetLastError”功能,但我仍然没有得到任何调试信息。如果我打开相同的文件并在 MS 中保存为 24-bmp 格式,则绘制图像然后加载。我认为生成的图像最初不兼容。我想我错过了一些愚蠢的东西,但我找不到我错过的东西。这是我第一次处理图像。
-
如果您使用写字板或记事本等文本编辑器打开原始位图,文件的前两个字符是什么? Windows 位图文件通常将 BM 作为文件中的前两个字符。
-
@AbhilashAruva GetLastError 返回了什么值?
-
您好,感谢您的回复。我对 C++ 中的这些图像很陌生。我找到了解决此问题的解决方法。我正在从我的库中生成 JPEG 格式的图像,然后使用 gdi+ 将此图像转换为 bmp 格式。 loadImage 函数现在能够加载新的 bmp 图像。感谢所有的帮助。