安卓相機開發

隨着手機性能的提高,多媒體的應用越來越普遍,其中拍照,錄像,美顏等都需要調用手機相機的功能。

相機採集和顯示的經典例子是下面谷歌的開源實現,是比較好的入門學習資料:

https://github.com/google/grafika

網上有很多開源的安卓相機的實現,比如下面的實現,只是時間比較久了:

https://github.com/wuhaoyu1990/MagicCamera

比較新的是下面的實現,它封裝了GPUImage來進行濾鏡和美顏的處理;

https://github.com/cats-oss/android-gpuimage

還有下面的實現,而且有網站說明http://blog.wysaid.org/

https://github.com/wysaid/android-gpuimage-plus

上面的基本都是在Java層做的的濾鏡美顏處理,下面的是在C層做的濾鏡美顏處理,效率比較高,而且也比較新,有很好的參考學習價值,還有簡書的說明;

https://github.com/cangwang/MagicCamera3

基本的思路都是一樣,一般首先都是採集數據,數據可以是相機採集的數據,或者是選擇的圖片;

採集了數據之後,一般通過幀緩衝(FBO)獲取到幀數據圖,然後再做濾鏡處理,爲何要這樣做呢?

是因爲如果你使用攝像頭採集幀圖是yuv數據,Android中shader(glsl)需要使用GL_OES的擴展庫來對數據做特殊處理;如果你想將圖片和攝像頭採集的數據做同一種轉換,那就需要兩個不同的文件,意思就是你需要維護兩份shader的代碼,這是一件很蛋痛的事。那要怎麼做才能效率高呢,最好的方式是先用GL_OES採集數據,然後通過幀緩衝來緩衝轉變爲RGBA數據,這樣再做濾鏡操作,這樣濾鏡的shader就只需要一份就了事了。

最後就是添加濾鏡的效果,顯示到屏幕上,也可以保存到文件中。

感謝上面所有的作者,僅作爲學習參考。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章