我正在尝试使用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绘图打开了QRCode图像“sample.bmp”并将其保存为24位Bitmap中的.bmp,现在我可以使用上面相同的“LoadImage”函数加载文件。
你能帮忙解释为什么在第一种情况下没有加载bmp文件吗?如何使用“LoadImage”函数使生成的QRCode图像正确加载,而无需使用转换为24位Bitmap图像MS Paint。如果它易于打印.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”。
答案 0 :(得分:1)
你能帮忙解释为什么在第一种情况下没有加载bmp文件吗?
BMP格式有很多变化。原始图像很可能是LoadImage无法直接转换为DIB的变体。因此,您将它在Paint中转换为可以打开的BMP变体。
特别是,有些变体可以将JPG数据的原始PNG打包到BMP容器中。这通常用于将压缩的图像数据直接传递给可以自行解压缩的打印机。 (根据我的经验,只有少数打印机支持这一点。)我不认为GDI API实际上可以用这种类型的BMP做其他事情。另一方面,Paint具有PNG和JPG的编解码器,所以我希望它的曲目可能包括那些格式,即使它们被打包在BMP头中。
如何使用" LoadImage"正确加载生成的QRCode图像?无需使用MS Paint转换为24位位图图像即可运行。
我认为您无法在不转换文件的情况下使用LoadImage执行此操作。现代版本的Windows有其他API可以加载BMP(以及PNG和JPG),因此您可以尝试其中一种。
另请告诉我是否可以轻松打印.jpg或.png图片而不是.bmp文件。
如果您使用我列出的其中一个API来加载图片,那么打印它应该非常简单。