除非先使用MS Paint打开/保存文件,否则带有QRCode位图的LoadImage()将失败
LoadImage() with QRCode bitmap failing unless file is opened/saved with MS Paint first
我正在尝试使用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图像,而不需要使用MS Paint转换为24位位图图像。还请告诉我打印.jpg或.png图像而不是.bmp文件是否容易。
谢谢Abhinay
编辑我已经尝试使用下面提到的"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);
}
}
我得到错误消息"getlasterrorisnull"。
你能帮我解释一下第一种情况下没有加载bmp文件的原因吗?
BMP格式有很多变体。原始图像很可能是LoadImage无法直接转换为DIB的变体。因此,您在Paint中将其转换为可以打开的BMP变体。
特别是,有一些变体可以将JPG数据的原始PNG打包到BMP容器中。这通常用于将压缩的图像数据直接传递给可以自行解压缩的打印机。(根据我的经验,只有少数打印机真正支持这一点。)我认为GDI API实际上不能用这种类型的BMP做太多其他事情。另一方面,Paint有PNG和JPG的编解码器,所以我希望它的曲目可能包括这些格式,即使它们被打包在BMP头中。
如何使用"LoadImage"功能正确加载生成的QRCode图像,而无需使用MS Paint转换为24位位图图像。
我认为如果不转换文件,您将无法使用LoadImage完成此操作。现代版本的Windows有其他可以加载BMP(以及PNG和JPG)的API,所以您可以尝试其中之一。
- GDI+(可能是最简单的)
- WIC
- OLE(可能是最复杂的,尤其是如果你不习惯COM的话)
还请告诉我打印.jpg或.png图像而不是.bmp文件是否容易。
如果您使用我列出的其中一个API来加载图像,那么打印它应该非常简单。
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- C++ 位图中的 ttc 字体
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 难以从 CImageList 设置菜单项位图
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 如何使用 freetype2 访问单色位图中的像素状态
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 位图到垫子/2D 数组
- Gdiplus位图没有Alpha通道
- 如何从路径字符串加载Gdiplus::位图
- 在C++中使用Gdiplus创建透明位图
- 用C++压缩内存中的位图
- C++gdi::内存中的位图到PNG图像
- LoadImage 函数不适用于 ImageMagick 创建的位图图像
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 将Qt qml文件转换为位图图像
- 除非先使用MS Paint打开/保存文件,否则带有QRCode位图的LoadImage()将失败