libpng错误没有被try / catch块捕获

时间:2014-02-06 23:54:19

标签: c++ opencv libpng

我正在使用OpenCV的imdecode()函数。当我传递部分图像时,它会打印到屏幕上显示“libpng错误:PNG输入缓冲区不完整”。我尝试将它放在try / catch块中,但我仍然看到正在打印。我该如何处理这些错误?

2 个答案:

答案 0 :(得分:0)

显示这些错误是因为它直接打印到输出,不会抛出异常。请注意,libpng是用C语言开发的,而不是C ++。

要删除此消息,您几乎必须编辑libpng源代码并重新编译它。

您可以尝试其他一件事:也许libpng会将其打印到stderr而不是stdout。如果是这样,您可以将stderr重定向到/dev/null或其他内容。

答案 1 :(得分:0)

libpng默认情况下会向stderr输出错误消息。但是你可以提供自己的 替换错误处理程序,使用错误消息执行任何操作。请参阅随libpng一起发布的libpng-manual.txt文件中的说明(查找“user_error_fn”。

你不需要重建libpng来做到这一点;只需将替换处理程序放在您自己的源代码中,并在png_create_read_struct()调用中指向它。