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的運行邏輯,就不進行進階介紹了。將以上流程走通之後,只需要配合文檔進一步設置就能實現高階效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章