相机拍照加入滤镜效果
前言:
-
在前面的文章中给小伙伴们介绍了进行Camera预览及实时美颜效果的实现,如果你还没有看过的话,建议先去看上一篇文章《Android 短视频开发之摄像头预览(二》Android 短视频编辑开发之摄像头预览实时美颜(三)
-
本篇文章会介绍如何实现摄像头捕捉的画面进行拍照留存
原理:
拍照其实就很简单了,主要是在执行拍照动作后把摄像头回调的数据进行处理后保存到本地就可以了
实现思路:
前面的预览及美颜过程就不罗嗦了,不懂可以看前面的文章。
这里我采用两种方式实现拍照
- 在onDrawFrame(GL10 gl)回调方法中获取当前EGL中渲染过的图像数据(由于这里每帧都会回调,要注意性能问题)
- 拿到摄像头捕获的原始数据放到GLSurfaceView的渲染队列中进行OpengGL渲染后(涉及到FrameBuffer的使用),再从EGL环境下获取渲染后的图片数据进行保存
具体实现
代码实现方式一:
@Override
public void onDrawFrame(GL10 gl) {
super.onDrawFrame(gl);
if(surfaceTexture == null)
return;
surfaceTexture.updateTexImage(); //获取最新的数据
float[] mtx = new float[16];
surfaceTexture.getTransformMatrix(mtx);
cameraInputFilter.setTextureTransformMatrix(mtx);
int id = textureId;
//进行OpenGL渲染
if(filter == null){
cameraInputFilter.onDrawFrame(textureId, gLCubeBuffer, gLTextureBuffer);
}else{
id = cameraInputFilter.onDrawToTexture(textureId);
filter.onDrawFrame(id, gLCubeBuffer, gLTextureBuffer);
}
if(isTakePicture){