我正在使用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. 未被捕獲的錯誤:[$ injector:modulerr] AngularJS
- 5. Eclipse警告未被捕獲錯誤
- 6. ELMAH設置 - 錯誤未被捕獲
- 7. 未被捕獲的錯誤:[$ injector:modulerr]
- 8. Python語法錯誤未被捕獲
- 9. 未被捕獲的錯誤:[$ injector:modulerr]
- 10. 角路由未被捕獲的錯誤
- 11. Angular.js未被捕獲的錯誤
- 12. 超時錯誤未被捕獲
- 13. WPF DataGrid驗證錯誤未被捕獲
- 14. angular.js:38未被捕獲的錯誤:[$ injector:modulerr]
- 15. 未被捕獲的錯誤:[$ injector:modulerr]由於
- 16. 未被捕獲類型錯誤與jquery
- 17. 未被捕獲的錯誤:找不到模塊「反應」
- 18. 未被捕獲的錯誤:沒有模塊:angularTypeahead
- 19. 未被捕獲的錯誤:沒有模塊:MyApp
- 20. 未被捕獲的錯誤:沒有模塊
- 21. Angular.js:未被捕獲的錯誤,沒有模塊:myapp
- 22. 未被捕獲的錯誤:沒有模塊:firebaseSimpleLogin
- 23. 嘗試捕獲塊中的未捕獲錯誤
- 24. R,tryCatch錯誤
- 25. 錯誤:未被捕獲(諾言):錯誤:沒有GoogleMaps供應商
- 26. 未被捕獲的錯誤[$注射器:modulerr]錯誤
- 27. 錯誤未被捕獲的錯誤:[$注射器:modulerr] angularjs
- 28. 流星錯誤:未捕獲錯誤:無法找到模塊'component.jsx'
- 29. 未捕獲的OAuthException錯誤
- 30. 未捕獲的Javascript錯誤
聲音就像它直接打印到錯誤流這與異常無關,因此與try/catch塊無關 – Xarn