Android Camera2 使用指北

目录

Camera2 API使用

Camera2 使用流程简述


在这里插入图片描述

 上面两幅图是camera硬件层面成像的基本流程,感觉图非常好,所以以此为开端!

Camera2 API使用

1. 监听和枚举相机设备。

mCameraManager = mActivity.getSystemService(Context.CAMERA_SERVICE) as CameraManager
val cameraIdList = mCameraManager.cameraIdList

2. 打开设备并连接监听器。

mCameraManager.openCamera(mCameraId, object : CameraDevice.StateCallback() {
	override fun onOpened(camera: CameraDevice) {
        //TODO 配置目标使用情形的输出
	}

	override fun onDisconnected(camera: CameraDevice) {
	}

	override fun onError(camera: CameraDevice, error: Int) {
	}
}, mCameraHandler)

3. 配置目标使用情形的输出(如静态捕获、录制等)。

val captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)

val surface = Surface(mTextureView.surfaceTexture)
captureRequestBuilder.addTarget(surface)  // 将CaptureRequest的构建器与Surface对象绑定在一起
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH)      // 闪光灯
captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) // 自动对焦

4. 为目标使用情形创建请求。

//第三个参数用来确定Callback在哪个Handler执行,null表示在当前线程执行
cameraDevice.createCaptureSession(arrayListOf(surface, mImageReader?.surface), object : CameraCaptureSession.StateCallback() {
	override fun onConfigureFailed(session: CameraCaptureSession) {
	}

	override fun onConfigured(session: CameraCaptureSession) {
		//TODO 捕获/重复请求和连拍
	}

}, mCameraHandler)

5. 捕获/重复请求和连拍。

session.setRepeatingRequest(captureRequestBuilder.build(), mCaptureCallBack, mCameraHandler)

6. 接收结果元数据和图片数据。

private val mCaptureCallBack = object : CameraCaptureSession.CaptureCallback() {
	override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) {
		super.onCaptureCompleted(session, request, result)
		canTakePic = true
	}

	override fun onCaptureFailed(session: CameraCaptureSession, request: CaptureRequest, failure: CaptureFailure) {
	}
}

切换使用情形时,返回到第 3 步。

Camera2 使用流程简述

在这里插入图片描述

参考 Android:Camera2开发详解

参考 Android Camera2 综述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值