BOB(中国)官方入口-BOB平台在线入口

栏目分类
热点资讯
BOB电竞平台
你的位置:BOB(中国)官方入口-BOB平台在线入口 > BOB电竞平台 > BOB电竞平台 Camera2自定义相机开发流程详解
BOB电竞平台 Camera2自定义相机开发流程详解

发布日期:2021-11-21 08:41    点击次数:191

序言 BOB电竞平台

今天给老铁们介绍Camera2相机开发流程详解;

Android5.0对拍照API进走了崭新的设计,新添了崭新设计的Camera2API,这些API不光大幅挑高了Android体系拍照的功能,还能声援RAW照片输出,甚至批准程序调整相机的对焦模式、曝光模式、快门等;

一、Camera2架构介绍

Camera2引用了管道的概念将安卓设备和摄像头之间联通首,体系向摄像头发送Capture乞求,而摄像头会返回CameraMetadata。这全部竖立在一个叫作CameraCaptureSession的会话中;

架构在中央参与类角色有:CameraManager、CameraDevice、CameraCharacteristics、CameraRequest与CameraRequest.Builder、CameraCaptureSession以及CaptureResult;BOB电竞平台

1、CameraManager

位于android.hardware.camera2.CameraManager下,也是Android21完善初首化,主要用于管理体系摄像头:

经由过程getCameraIdList手段获取Android设备的摄像头列外; getCameraCharacteristics获取摄像头的详细参数和声援的功能; 2、CameraDevice CameraDevice是Camera2中抽象出的一个对象,直接与体系硬件摄像头相相关; 即摄像头功能可被分为limit和full两个级别,当摄像头处于limited级别时候,此时Camera2和早期的Camera功能差不众,除此之外在Camera2架构中,CameraDevice还承担其他主要义务: 经由过程CameraDevice.StateCallback监听摄像头的状态; 管理CameraCaptureSession,-经由过程手段createCaptureSession手段创建会话,清淡会在CameraDevice.StateCallback中调用对答手段创建预览会话; 管理CaptureRequest,主要包括经由过程createCaptureRequest创建捕获乞求,在必要预览、拍照、再次预览的时候都必要经由过程创建乞求完善; 3、CameraCaptureSession 体系向摄像头发送Capture乞求,而摄像头会返回CameraMetadata,这全部都是在由对答的CameraDevice创建的CameraCaptureSession会话完善,当程序必要预览、拍照、再次预览时,都必要先经由过程会话; CameraCaptureSession的有许众主要回调: 管理CameraCaptureSession.StateCallback状态回调,用于授与相关CameraCaptureSession状态的更新的回调对象; 管理CameraCaptureSession.CaptureCallback捕获回调,用于授与捕获乞求状态的回调,当乞求触发捕获已启动时;捕获完善时;在捕获图像时发生舛讹的情况下;都会触发该回调对答的手段; 经由过程调用手段capture手段附着到对答的Surface上表现; 经由过程调用手段setRepeatingRequest乞求不息重复捕获图像,即实现预览; 经由过程手段调用stopRepeating实现停留捕获图像,即停留预览; 4、CameraCharacteristics

描述Cameradevice属性的对象,BOB电竞平台能够行使CameraManager经由过程getCameraCharacteristics进走查询;

5、CameraRequest和CameraRequest.Builder

CameraRequest代外了一次捕获乞求而CameraRequest.Builder用于描述捕获的各栽参数竖立包含捕获硬件手段进走拍照时都必要传入CameraRequest参数。CameraRequest能够经由过程CameraRequest.Builder进走初首化经由过程调用createCaptureRequest获得;

6、CaptureResult

CaptureRequest描述是从图像传感器捕获单个图像的效果的子集的对象当CaptureRequest被处理之后由CameraDevice生成;

7、Camera2主要角色之间的相关

CameraManager处于顶层管理位置负责检测获取所有摄像头及其特性和传入指定的CameraDevice.StateCallback回调掀开指定摄像头CameraDevice是负责管理抽象对象包括监听Camera的状态回调CameraDevice.StateCallback、创建CameraCaptureSession和CameraRequest;

二、Camera2相机开发流程详解

1、申请权限
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

2、在xml组织文件中定义一个TextureView
<TextureView    android:id="@+id/textureView"    android:layout_width="match_parent"    android:layout_height="match_parent" /> 
3、创建一个CameraHelper类并给TextureView对象增补回调函数
class Camera2Helper             }         }     } } 
掀开相机和创建会话等都是耗时操作于是吾们启动一个HandlerThread在子线程中处理; 有两个关于尺寸的变量一个是预览尺寸; 有两个倾向一个是手机倾向; 4、初首化相关参数
/**      * 初首化      */     private fun initCameraInfo             else -> sizeList[0]         }     } 
最先经由过程mActivity.getSystemServiceasCameraManager获取到CameraManager实例; 经由过程循环遍历设备中可用的相机经由过程mCameraManager.getCameraCharacteristics获取到相机的各栽新闻; mCameraCharacteristics.get获取到相机传感器的倾向; 经由过程configurationMap.getOutputSizes获取到相机声援的预览尺寸和保存的尺寸; exchangeWidthAndHeight手段的作用是按照屏幕倾向和摄像头倾向确定是否必要交换宽高; 经由过程getBestSize和相机声援的尺寸列外从相机声援的尺寸列外中得到一个最优值; 经由过程mTextureView.surfaceTexture.setDefaultBufferSize手段用竖立TextureView的预览尺寸; 创建一个ImageReader对象并竖立回调函数; 在onImageAvailableListener中处理得到的图像数据; 5、掀开相机
/**      * 掀开相机      */     private fun openCamera     } 
6、创建预览会话
/**      * 创建预览会话      */     private fun createCaptureSession         }     } 
经由过程cameraDevice.createCaptureRequest创建一个用于预览的Builder对象; 为该Builder对象增补一个Surface对象并竖立各栽相关参数; 经由过程cameraDevice.createCaptureSession创建一个会话第一个参数中传了一个surface和mImageReader?.surface。这外清新这次会话的图像数据的输出到这两个对象; 当会话创建成功时经由过程session.setRepeatingRequest发首预览乞求; 7、拍照、保存
/**      * 拍照      */     fun takePic     } 
经由过程createCaptureRequest创建一个拍照乞求的Builder对象; 然后竖立各栽参数。仔细captureRequestBuilder.set用竖立保存照片的旋转倾向。倘若不竖立的话保存的照片不是"自然倾向"; 拍照的效果是在OnImageAvailableListener对象中得到的; 经由过程acquireNextImage手段获取到一个Image对象然后经由过程image.planes[0].buffer得到byteBuffer将这个byteBuffer转换成byteArray; 这个byteArray就是拍照所得到的图像数据。然后就能够把这个byteArray保存成到手机存储中; 8、开释相机及线程
fun releaseCamera     } 
总结

Camera2API和旧的CameraAPI不同很大刚最先用能够会很不习气但Camera2有许众上风挑供了专门众的参数供吾们限制;

一首学习添油老铁们;BOB电竞平台



BOB电竞平台 BOB体育首页 BOB综合体育在线