众所周知,通过setPreviewHolder可以将预览数据显示在一个SurfaceView上,即可实现相机拍照时的预览功能,通过添加各个控件和接口即可实现简单相机应用,但如果需要对预览画面进行处理,例如类似美图秀秀等相机APP的实时滤镜功能,此种方案无法达到目的,需要另外需找办法,本系列旨在探讨Android平台相机开发,结合图像处理,UI设计,实现类似于美图秀秀,Instagram,aillias等优秀相机APP的效果。
目前Android平台优质的预览数据实时处理开源代码不多,例如android-gpuimage,采用将YUV数据在NDK层转化为RGB数据,由OpenGL渲染到屏幕中,滤镜算法由Shader实现
其他方面,经过研究,目前主要有以下思路实现
1.不转换,直接由OpenGL绘制,采用Shader实现图像处理(因处理算法和渲染图片大部分采用RGB格式,此方案暂不考虑,仅提出可能性);
2.通过C/C++实现YUV->RGB和图像处理,合成Bitmap,由CPU绘制在Canvas上;
3.通过C/C++实现YUV->RGB和图像处理,在NDK层直接绘