前言
在SurfaceView初步以及Camera初步中我介绍了如何使用SurfaceView以及如何使用SurfaceView来预览Camera画面,接下来我就来介绍下如何给Camera添加水印效果。由于SurfaceView不支持回显,也就是将摄像头捕获到的数据处理以后重新设置到界面上,所以我会使用两个SurfaceView来介绍。
思路
我们想给预览界面添加水印第一步肯定是需要获取到每一帧的数据然后处理完以后再绘制到界面上,Android为Camera提供了两个接口用于获取每一帧的数据。分别如下
1
2
3
4
5
6
//每一帧准备好了就直接回调
voidandroid.hardware.Camera.setPreviewCallback(PreviewCallbackcb)
//带有缓存的回调,调用
//void android.hardware.Camera.addCallbackBuffer(byte[] callbackBuffer)
//方法才会回调,每调用一次回调一次
voidandroid.hardware.Camera.setPreviewCallbackWithBuffer(PreviewCallbackcb)
第一种方式:setPreviewCallback方法,设置回调接口:PreviewCallback
在回调方法:onPreviewFrame(byte[] data, Camera camera) 中处理每一帧数据
第二种方式:setPreviewCallbackWithBuffer方法,同样设置回调接口:PreviewCallback,不过还需要一个方