4

我想使用安卓相機創建色度鍵效果。我不需要一步一步,但我想知道劫持安卓相機並應用濾鏡的最佳方法。我已經檢查了這個API,並且沒有發現任何關於如何處理來自相機的數據的超級明確性。起初,我使用表面紋理進行了研究,但是我並沒有完全意識到如何幫助或者如何使用它。然後我使用GLSurfaceView檢出,這可能是正確的方向,但不確定。使用安卓相機創建色度鍵效果的第一步

此外,要添加到我的問題,我將如何處理圖像的預覽和保存?我會最少處理圖像兩次嗎?一次預覽,一次保存?我認爲這可能是最好的解決方案。

最後,創建一個C/++包裝來處理優化速度的處理是否有意義?

任何幫助都將不勝感激。鏈接到一些例子也將不勝感激。

謝謝。

+1

http://stackoverflow.com/questions/5583820/adding-effect-to-an-android-camera-preview – fneron 2013-04-11 18:32:18

+0

您是否需要我的答案中提供更多詳細信息? – 2013-04-18 10:56:34

+0

@ Jaa-c Nope。對於遲到的批准感到抱歉,沒有意識到我的問題直到今天才有答案。謝謝一堆! – Kyle 2013-04-18 14:22:05

回答

4

唯一真正的機會是使用openGL ES和片段着色器(它至少需要openGL ES 2.0)並對GPU執行色度鍵效果。着色器本身會很容易(谷歌)。

但要做到這一點,你需要顯示帶回調的相機預覽。您將必須執行Camera.PreviewCallback,爲圖像數據創建緩衝區並使用setPreviewCallbackWithBuffer方法。你可以從我的answer得到基本的想法到一個類似的問題。請注意,此自定義相機預覽的性能存在嚴重問題,但它可能適用於支持ES 2.0的硬件。

要使用openGL顯示預覽,您需要擴展GLSurfaceView並執行GLSurfaceView.Renderer。然後,將相機預覽幀作爲紋理與glTexImage2D綁定到某個簡單的矩形,其餘部分將由着色器處理。看看如何在ES here中使用着色器,或者如果你沒有着色器經驗,this tutorial可能是一個好的開始。

另一個問題:您可以從預覽中保存當前圖像,但預覽的分辨率比拍攝的圖片要低,因此您可能需要拍攝一張照片然後分別進行處理(您可以使用相同的着色器)。

至於C++,這是很多額外的努力與可疑的輸出。但如果做得對,它可以提高性能。嘗試檢查這個article,它是一個類似的主題,它描述瞭如何使用NDK處理攝像頭預覽並在openGL中顯示它。但是,如果您正在考慮在C++中執行色度鍵效果,它將比着色器慢得多。

+0

完美,謝謝! – Kyle 2013-04-18 14:21:00

+0

@ Jaaa-c感謝人 – Siddharth 2014-06-27 05:58:56

+0

原來的「教程」鏈接已經死機。 Google搜索後,我在這裏找到了另一個版本:https://pixelp3.wordpress.com/2011/03/13/shaders-android/ – gMale 2017-01-24 20:18:18

1

有一個色度鍵,項目對谷歌碼:http://code.google.com/p/chroma-key-project/它包括一種方式來上傳的令牌使用色度鍵圖片:

窮舉搜索上線後,我並沒有發現任何開源項目工作>與Android設備的色度鍵控。這個項目的目的是提供一個有用的>色度鍵庫,它可以很容易地實現應用程序和遊戲,可以在綠色或藍色屏幕前拍攝照片,並將照片應用到選定的背景上。 >此外,應用程序還允許用戶使用Intent上傳圖片。