2014-02-06 56 views
0

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

+0

声音就像它直接打印到错误流这与异常无关,因此与try/catch块无关 – Xarn

回答

0

默认情况下,libpng将错误消息打印到stderr。但是,您可以提供您自己的 替换错误处理程序,以根据错误消息执行任何操作。请参阅随libpng分发的libpng-manual.txt文件中的说明(查找“user_error_fn”)。

您不需要重建libpng来执行此操作;只需将您的替换处理程序放在自己的源代码中在你的png_create_read_struct()调用中有一个指向它的指针

+0

我没有使用libpng直接使用另一个依赖于libpng的库(opencv),那么这仍然有可能吗? – Crypto

+0

如果你的应用程序调用了png_create_read_struct(),那么你可以这样做,如果opencv不能用它的替换错误处理程序自己,然后给你的能力替换,然后不。我没有在docs.opencv.org的文档中看到任何内容,指出可以使用自定义错误处理程序。 –

+0

我在libpng源文件中搜索“缓冲区不完整”并且空了。所以我猜应用程序,而不是libpng,正在调用png_error()。 –

0

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

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

只有一件事你可以尝试:也许libpng打印到stderr而不是stdout。如果是这样,你可以将stderr重定向到/dev/null或其他东西。