2014-02-06 57 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或其他東西。