c++ - “Magick++::readImages”在我调用它来解码 Blob 对象内的 png 图像时会引发警告
问题描述
我使用 Magick++ 处理图像,下面的代码抛出警告:“Magick: iCCP: known wrong sRGB profile ()reported by coders/png.c:1105 (PNGWarningHandler)”
......
string img;
//assign image to this string(img)
std::list<Image> m_images;
......
Blob src_blob(image.data(), image.length());
readImages(&m_images, src_blob);//in this function throw a warning exception
if (!m_images.empty()) {
Image image = *(m_images.begin());
}
......
但是如果我像这样构造图像:
Blob src_blob(image.data(), image.length());
Image image(src_blob);
代码将起作用并且不会抛出异常
此图像的标识:
$identify case1.png
case1.png PNG 800x800 800x800+0+0 8-bit sRGB 807280B 0.000u 0:00.004
(我必须使用readImages因为我可能会处理 gif 图像)
解决方案
尝试以下...
std::list<Image> m_images;
// ...
ReadOptions opts;
opts.quiet(true);
Blob src_blob(image.data(), image.length());
readImages(&m_images, src_blob, opts);
设置ReadOptions.quiet
为true
将在解码期间抑制任何警告。
// From `Magick::throwException` method.
if ((quiet_) && (severity < MagickCore::ErrorException))
{
delete nestedException;
return;
}
但是如果我像这样构造图像:
Blob src_blob(image.data(), image.length()); Image image(src_blob);
代码将起作用并且不会抛出异常
这是因为constructor-helper方法quiet
为了方便而临时设置。
// From Image.cpp
Magick::Image::Image(const Blob &blob_)
: _imgRef(new ImageRef)
{
try
{
// Initialize, Allocate and Read images
quiet(true);
read(blob_);
quiet(false);
}
catch (const Error&)
{
// Release resources
delete _imgRef;
throw;
}
}
推荐阅读
- javascript - 如何使用表单输入设置数据
- outlook-addin - 是否可以对 MAPITable 的 ExecSQL 主题进行 NOT LIKE 过滤器?展望赎回
- c - 绘制点之间的中点线
- vue.js - 如何导入 lodash 单个函数并在 Vue.js 模板上使用?
- database - 通过电子邮件更新 Oracle 数据库表
- ruby-on-rails - 无法让 form_with 传递路径所需的 :id
- python-3.6 - 使用 Inno Setup,Python 3.6.8-32bit,创建的 .exe 在源计算机上运行,而不是在其他计算机上运行
- azure-logic-apps - 如何阻止 Azure Logic App SMS 泛滥?
- ios - ARC 保留周期、大中央调度和关闭
- java - 如何在 Windows 10 中为 Java 应用程序创建故障转储文件