LoadImage 函数不适用于 ImageMagick 创建的位图图像

Posted

技术标签:

【中文标题】LoadImage 函数不适用于 ImageMagick 创建的位图图像【英文标题】:LoadImage Function isn't Working With ImageMagick Created Bitmap Images 【发布时间】:2017-08-23 10:26:53 【问题描述】:

我正在尝试使用我的应用程序加载一些位图图像以进行一些比较,这些图像是使用 ImageMagick 使用以下命令创建的:

C:\Program Files\ImageMagick-7.0.6-Q16>Convert << SOURCE BMP >> -crop -650 << DEST BMP >>

上面的源位图图像使用LoadImage API 函数可以正常加载,但是由 ImageMagick(目标位图)创建的图像无法加载。

我是如何使用LoadImage函数的:

HBitmapRight = (HBITMAP)LoadImage(nullptr, L"C:\\DEST.bmp", IMAGE_BITMAP, NULL, NULL, LR_LOADFROMFILE);
HBitmapRight = (HBITMAP)LoadImage(nullptr, L"C:\\SOURCE.bmp", IMAGE_BITMAP, NULL, NULL, LR_LOADFROMFILE);

我使用了GetLastError,但它返回了ERROR_SUCCESS

根据我的研究,我找到了this 的答案,所以这可能是编码问题或类似问题。

很遗憾,我无法使用 MS Paint 或 Photoshop 等任何工具,但我只能使用 ImageMagick,因为此比较是使用命令行完成的,无需用户交互。

是否可以设置任何特殊的编码标志与 ImageMagick 一起使用,以便由它创建的位图图像可以与 LoadImage 兼容?

我在我的 Windows 7 64 位机器上运行这个应用程序,并且安装的 ImageMagick 也是它的最新 64 位版本。编译器是 MS Visual C++ 2017.

这些是导致问题的行:

<Mask>
<Red/>
<Green/>
<Blue/>
<Alpha/>
</Mask>
<ColorSpaceType/>
<CIEXYZEndPoints>
<Red>
<X/>
<Y/>
<Z/>
</Red>
<Green>
<X/>
<Y/>
<Z/>
</Green>
<Blue>
<X/>
<Y/>
<Z/>
</Blue>
</CIEXYZEndPoints>
<Intent/>

这些行在 ImageMagick 创建的图像的 XML 元数据中。我检查了源图像,它没有那些行。

请帮助我在没有用户交互的情况下解决此问题。

【问题讨论】:

请帮帮我,这是紧急问题,在我解决这个意外问题之前我无法继续。 【参考方案1】:

我通过将 ImageMagick 命令更改为使用特定版本的位图格式来解决问题,如下所示:

C:\Program Files\ImageMagick-7.0.6-Q16>Convert << SOURCE BMP >> -define bmp:format=bmp3 -crop -650 << DEST BMP >>

现在LoadImage API 函数可以很好地与 ImageMagick 创建的位图图像配合使用。

【讨论】:

以上是关于LoadImage 函数不适用于 ImageMagick 创建的位图图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 MapBox loadImage 函数时,仅在 Chrome 中出现 AWS S3 CORS 错误

loadimage没有与参数列表匹配的重载函数 解决方案

loadimage没有与参数列表匹配的重载函数 解决方案

LoadImage() 返回 NULL 并且 GetLastError() 返回 0

装饰器适用于函数但不适用于类

错误:包装函数仅适用于 `onCall` HTTP 函数,不适用于 `onRequest`