双SurfaceView实现手机摄像头预览、监听每一帧做处理绘制浮层效果(Demo画了一个矩形上去)

本文介绍如何使用双SurfaceView实现手机摄像头预览并监听每一帧进行处理,如人脸检测,同时在预览图像上绘制浮层效果。通过自定义CameraView和FloatingLayerView,以及DoubleSurfaceView整合,实现背景透明的浮层效果。文章提供了关键API的使用,如Camera.getNumberOfCameras(),Camera.open()等,并提示不要在onPreviewFrame()回调中直接处理帧数据。
摘要由CSDN通过智能技术生成

应用场景

当时用手机摄像头做实时预览时、需要对视频中的图像做人脸检测、绘制一些效果到人脸上等。。。

实现思路

1.自定义 CameraView extends SurfaceView 做摄像头预览。
2.自定义 FloatingLayerView extends SurfaceView 做上层图标绘制。
3.自定义 DoubleSurfaceView extends FrameLayout 整合上两个View、开启相机、监听帧数据。

关键点:

因为是要使用两个SurfaceView重叠在一起实现最终效果、所以处于上层的SurfaceView必须是背景透明的。
使用下面设置来实现:

setZOrderOnTop(true);// 设置层级处于顶层
getHolder().setFormat(PixelFormat.TRANSPARENT);// 设置背景透明

另外一个做摄像头预览的CameraView 不需要做设置。

技术点:

开启摄像头技术需要使用到的API

静态方法
- Camera.getNumberOfCameras(); // 获取摄像头数量
- Camera.getCameraInfo(camIdx, cameraInfo); // 获取对应ID的摄像头信息
- Camera.open(camIdx); // 开启对应ID的摄像头
- Camera.CameraInfo.CAMERA_FACING_BACK // 后摄像头
- Camera.CameraInfo.CAMERA_FACING_FRONT // 前摄像头

非静态
- mCamera.setDisplayOrientation(result); // 设置摄像头旋转角度
- mCamera.getParameters(); // 获取当前摄像头参数信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值