2010-12-03 24 views
2

處理後手動顯示來自Camera.PreviewCallback的幀。我已經構建了一個人臉檢測應用程序,其中我從onPreviewFrame獲取幀,執行臉部檢測,然後在我的surfaceView上方的畫布上繪製一個圓。問題是當Camera.StartPreview()啓動時,使用surfaceview線程自動顯示幀。這對於PreviewCallback來說顯然是必要的。由於處理,面部檢測和繪圖是在單獨的線程中完成的(我在這裏假設),所顯示的幀與該幀的結果之間存在2秒的延遲在畫布上進行處理和繪製。如何在Camera.Preview

我想要做的是停止相機預覽顯示幀並在處理後自己顯示它們。我相信這有三個好處:

延遲消失。

我可以直接繪製位圖而不是無用的畫布,因爲無法撤消所做的操作。

由於沒有兩個線程使用相同的圖像,它將有助於保持內存消耗低。

我讀過可以顯示來自previewCallback的幀,有人知道如何以及如何停止自動顯示的幀?

非常感謝提前。

回答

1

James,在這裏我找到了一個解決方案,如果你想停止相機預覽,只需註釋掉兩行(我想你使用CameraPreview.java作爲開頭) // Camera.setPreviewDisplay(holder); // setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 這些意味着相機不會使用表面來顯示預覽,因此您可以直接使用回調數據來顯示,但效率非常低,模擬器上只有1fps,但是,我認爲這是一個解決方案,然後你就可以考慮如何更有效地將幀繪製未來

祝你好運,我想知道,如果這個解決方案:)

+1

謝謝你以後對你OK,這並停止顯示預覽。我需要弄清楚我現在將如何顯示位圖,因爲SurfaceView顯然仍然存在於佈局上,爲了測試,我將位圖繪製到可以正常工作的畫布上,但是當我爲每個預覽回調嘗試此操作時,都會出現延遲約3秒。再次感謝這有助於。 – 2010-12-06 12:50:30