對於相機預覽,我們可以設置一個surfaceView以通過相機工作流程顯示預覽數據。但我想先增強預覽數據(如提取邊緣圖),然後將增強的預覽數據顯示到sufaceView(例如僅顯示邊緣圖)。如何增強相機預覽?
我該怎麼做?
對於相機預覽,我們可以設置一個surfaceView以通過相機工作流程顯示預覽數據。但我想先增強預覽數據(如提取邊緣圖),然後將增強的預覽數據顯示到sufaceView(例如僅顯示邊緣圖)。如何增強相機預覽?
我該怎麼做?
您需要停止發送到surfaceView並自動顯示的幀。我問了這個問題,得到了這個回覆,https://stackoverflow.com/a/4363417/514531,基本上你必須改變SurfaceView的類型爲默認設置而不是mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
,所以只需省略這一行。其次,您不希望將預覽設置爲任何顯示,因此當您設置攝像機時,請刪除線 Camera.setPreviewDisplay(mHolder); // mHolder is your holder to the SurfaceView
我假設您設置了攝像機回調,這是通過讓您的課程實現Camera.PreviewCallback
來實現的,其中包括接收原始幀的onPreviewFrame()
方法。您需要將這些幀處理爲位圖,這在https://stackoverflow.com/a/4367250/514531中進行了解釋。完成此操作後,您可以對圖像執行任何圖像處理。 當您想在SurfaceView上顯示圖像時,您現在可以通過將位圖繪製到SurfaceView上的畫布上來手動執行此操作。您首先創建一個Canvas對象並使用Canvas mCanvas = mHolder.lockCanvas()
將其附加到SurfaceView,您現在可以使用Canvas類的各種Draw方法在屏幕上顯示您的位圖。使用Draw方法後,調用mHolder.unlockCanvas()
以顯示圖像。我希望這是你以後的樣子。