Camera2框架使用简介

Camera2框架使用简介

在Android 21时Google更新了以往的摄像头类库Camera,取而代之的是Camera2。作为更新版本,Camera2具有更强功能的同时也增加了我们使用的困难性。

核心类

  • CameraManager:作为整个框架的入口,用于初始化其他类,本身意义不大,使用也很简单。
  • CameraCharacteristics:通过CameraManager获得,可提供Camera相关参数,例如:设备支持的分辨率等。
  • CameraDevice:通过CameraManager获得,类似之前的Camera类,可以进行预览等操作,例如:设置显示预览的Surface。
  • CaptureRequest.Builder:通过CameraDevice获得,可以设置预览的相关配置。
  • CameraCaptureSession:通过CameraDevice获得,控制通过CaptureRequest.Builder进行预览。

预览调用流程

CameraManager -> CameraDevice -> CaptureRequest.Builder -> CameraCaptureSession。

代码

初始化CameraManager:

val cameraManager = context.getSystemService(Service.CAMERA_SERVICE) as CameraManager

获得CameraDevice:

    cameraManager.openCamera(cameraManager.cameraIdList[0], object : CameraDevice.StateCallback() {
        override fun onOpened(camera: CameraDevice) {
        }

        override fun onDisconnected(camera: CameraDevice?) {
        }

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

    }, null)

获得CaptureRequest.Builder,配置预览Surface:

val captureBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
captureBuilder.addTarget(surface)

获得CameraCaptureSession,开始预览:

    camera.createCaptureSession(surfaceList, object : CameraCaptureSession.StateCallback() {
        override fun onConfigureFailed(session: CameraCaptureSession) {
            log("相机预览出错: onConfigured")
        }

        override fun onConfigured(session: CameraCaptureSession) {
            log("onCameraSessionConfigure")
            try {
                mPreviewBuilder.set(CaptureRequest.JPEG_ORIENTATION, 90)
                mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, backgroundHandler)
            } catch (e: CameraAccessException) {
                e.printStackTrace()
            }
        }

    }, backgroundHandler)

写在最后

本文只介绍了Camera2的基础预览使用流程,为了让刚接触的朋友可以更为清晰的理解Camera2的运行逻辑,就不进行进阶介绍了。将以上流程走通之后,只需要配合文档进一步设置就能实现高阶效果。

猜你喜欢

转载自blog.csdn.net/ccw0054/article/details/80339208
今日推荐