如何使用 Camera2 扩展 API 获取实时位图图像

Kru*_*iya 5 java android image-processing android-camera android-camera2

我正在使用Camera2 扩展示例进行实时图像处理。在此之前我使用的是Camera2 Basic。在基本示例中,我从下面的代码片段中获取实时图像。

val captureRequest = camera.createCaptureRequest(
    CameraDevice.TEMPLATE_PREVIEW
).apply {
    addTarget(getViewDataBinding()?.viewFinder!!.holder.surface)
    addTarget(imageReader.surface)
}

// This will keep sending the capture request as frequently as possible until the
// session is torn down or session.stopRepeating() is called
captureRequest.set(
    CaptureRequest.CONTROL_MODE,
    CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE
)
captureRequest.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF)
session.setRepeatingRequest(captureRequest.build(), null, cameraHandler)
Run Code Online (Sandbox Code Playgroud)

你可以看到,我在上面的代码中添加了目标imageReader。我使用扩展 API 几乎类似的方式。但是在ExtensionSessionConfiguration配置方法中。

cameraExtensionSession = session
try {
    val captureRequest = camera.createCaptureRequest(
        CameraDevice.TEMPLATE_PREVIEW
    ).apply {
        addTarget(previewSurface)
        addTarget(imageReader.surface)
    }
    captureRequest.set(
        CaptureRequest.CONTROL_MODE,
        CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE
    )
    cameraExtensionSession.setRepeatingRequest(
        captureRequest.build(),
        Dispatchers.IO.asExecutor(), captureCallbacks
    )
} catch (e: CameraAccessException) {
    Toast.makeText(
        this@LiveCameraActivity, "Failed to preview capture request.",
        Toast.LENGTH_SHORT
    ).show()
    finish()
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我如下错误

java.lang.IllegalArgumentException: Invalid repeating request output target!
    at android.hardware.camera2.impl.CameraExtensionSessionImpl.setRepeatingRequest(CameraExtensionSessionImpl.java:442)
    at com.cherish.smartcam.ui.liveCamera.LiveCameraActivity$startPreview$extensionConfiguration$1.onConfigured(CameraActivity.kt:399)
Run Code Online (Sandbox Code Playgroud)

我已将图像配置为 JPEG。我的问题在这里,

  • 如何使用 Camera2 扩展 API 获取实时位图图像?
  • 上面的代码有什么问题吗?