我正在使用OpenCV的imdecode()函数。当我传递部分图像时,它会打印屏幕,显示“libpng错误:PNG输入缓冲区不完整”。我试图把它放在try/catch块中,但我仍然看到正在打印。我如何处理这些错误?libpng错误未被try/catch块捕获
回答
默认情况下,libpng将错误消息打印到stderr。但是,您可以提供您自己的 替换错误处理程序,以根据错误消息执行任何操作。请参阅随libpng分发的libpng-manual.txt文件中的说明(查找“user_error_fn”)。
您不需要重建libpng来执行此操作;只需将您的替换处理程序放在自己的源代码中在你的png_create_read_struct()调用中有一个指向它的指针
我没有使用libpng直接使用另一个依赖于libpng的库(opencv),那么这仍然有可能吗? – Crypto
如果你的应用程序调用了png_create_read_struct(),那么你可以这样做,如果opencv不能用它的替换错误处理程序自己,然后给你的能力替换,然后不。我没有在docs.opencv.org的文档中看到任何内容,指出可以使用自定义错误处理程序。 –
我在libpng源文件中搜索“缓冲区不完整”并且空了。所以我猜应用程序,而不是libpng,正在调用png_error()。 –
显示这些错误是因为它直接打印到输出,不会引发异常。请注意,libpng是用C开发的,而不是C++开发的。
要删除此消息,几乎必须编辑libpng源代码并重新编译它。
只有一件事你可以尝试:也许libpng打印到stderr
而不是stdout
。如果是这样,你可以将stderr
重定向到/dev/null
或其他东西。
- 1. 嵌套tryCatch没有捕获错误?
- 2. 未被捕获的错误:[$ injector:modulerr]和未被捕获的错误:[$ injector:nomod]
- 3. 未被捕获的错误:INDEX_SIZE_ERR
- 4. WPF DataGrid验证错误未被捕获
- 5. 角路由未被捕获的错误
- 6. 未被捕获类型错误与jquery
- 7. Python语法错误未被捕获
- 8. Eclipse警告未被捕获错误
- 9. angular.js:38未被捕获的错误:[$ injector:modulerr]
- 10. 未被捕获的错误:[$ injector:modulerr]
- 11. 未被捕获的错误:[$ injector:modulerr]
- 12. ELMAH设置 - 错误未被捕获
- 13. 未被捕获的错误:找不到模块“反应”
- 14. 未被捕获的错误:没有模块:angularTypeahead
- 15. 未被捕获的错误:没有模块:MyApp
- 16. 未被捕获的错误:没有模块
- 17. 未被捕获的错误:没有模块:firebaseSimpleLogin
- 18. Angular.js:未被捕获的错误,没有模块:myapp
- 19. 尝试捕获块中的未捕获错误
- 20. 未被捕获的错误[$注射器:modulerr]错误
- 21. 错误:未被捕获(诺言):错误:没有GoogleMaps供应商
- 22. 错误未被捕获的错误:[$注射器:modulerr] angularjs
- 23. angularJS未捕获的错误
- 24. javascript错误。未捕获ReferenceError
- 25. 未捕获的OAuthException错误
- 26. 未捕获引用错误
- 27. 未捕获类型错误
- 28. AngularJS未捕获错误:$ injector:modulerr
- 29. 未捕获的Javascript错误
- 30. 未捕获引用错误
声音就像它直接打印到错误流这与异常无关,因此与try/catch块无关 – Xarn