1. 程式人生 > >Android美顏貼紙部分原理

Android美顏貼紙部分原理

SurfaceTexture是從Android3.0(API 11)加入的一個新類。這個類跟SurfaceView很像,可以從camera preview或者video decode裡面獲取影象流(image stream)。但是,和SurfaceView不同的是,SurfaceTexture在接收影象流之後,不需要顯示出來。有做過Android camera開發的人都知道,比較頭疼的一個問題就是,從camera讀取到的預覽(preview)影象流一定要輸出到一個可見的(Visible)SurfaceView上,然後通過Camera.PreviewCallback的public void onPreviewFrame(byte[] data, Camera camera)函式來獲得影象幀資料的拷貝。這就存在一個問題,比如我希望隱藏攝像頭的預覽影象或者對每一幀進行一些處理再顯示到手機顯示屏上,那麼在Android3.0之前是沒有辦法做到的,或者說你需要用一些小技巧,比如用其他控制元件把SurfaceView給擋住,注意這個顯示原始camera影象流的SurfaceView其實是依然存在的,也就是說被擋住的SurfaceView依然在接收從camera傳過來的影象,而且一直按照一定幀率去重新整理,這是消耗cpu的,而且如果一些引數設定的不恰當,後面隱藏的SurfaceView有可能會露出來,因此這些小技巧並不是好辦法。但是,有了SurfaceTexture之後,就好辦多了,因為SurfaceTexture不需要顯示到螢幕上,因此我們可以用SurfaceTexture接收來自camera的影象流,然後從SurfaceTexture中取得影象幀的拷貝進行處理,處理完畢後再送給另一個SurfaceView用於顯示即可。