捕获图像

本页面介绍了如何使用 CameraX 捕获高质量图像。您可以使用 ImageCapture 类及其关联方法来完成此操作。

关键概念

本文档中讨论的主要概念如下:

  • 存储方法 您可以将图像捕获到内存缓冲区,也可以直接捕获到文件。
  • 执行器 ImageCapture 使用执行器来处理回调和 I/O 操作。您可以自定义这些执行器以获得更好的性能和控制。
  • 捕获模式 您可以配置捕获模式,以优化延迟或图像质量。

存储方法

有两种使用 ImageCapture 捕获图像的方法。它们都使用 ImageCapture.takePicture() 的一个重载。

执行器

调用 takePicture 时,您需要传递一个 Executor 以及一个 OnImageCapturedCallbackOnImageSavedCallback 函数。Executor 运行回调并处理任何由此产生的 I/O。

拍照

要拍照,您需要设置相机,然后调用 takePicture

设置相机

要设置相机,请创建 CameraProvider。然后,创建一个 ImageCapture 对象。使用 ImageCapture.Builder()

Kotlin

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)

Java

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);

拍照

配置相机后,调用 takePicture() 捕获图像。此示例演示了如何使用 takePicture() 将图像保存到磁盘

Kotlin

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...)).build()
    imageCapture.takePicture(outputFileOptions, cameraExecutor,
        object : ImageCapture.OnImageSavedCallback {
            override fun onError(error: ImageCaptureException)
            {
                // insert your code here.
            }
            override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
                // insert your code here.
            }
        })
}

Java

public void onClick() {
    ImageCapture.OutputFileOptions outputFileOptions =
            new ImageCapture.OutputFileOptions.Builder(new File(...)).build();
    imageCapture.takePicture(outputFileOptions, cameraExecutor,
        new ImageCapture.OnImageSavedCallback() {
            @Override
            public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                // insert your code here.
            }
            @Override
            public void onError(ImageCaptureException error) {
                // insert your code here.
            }
       }
    );
}

此代码段的要点如下:

  • ImageCapture.OutputFileOptions 允许您配置保存位置和元数据。
    • 在这里,OutputFileOptions.Builder() 使用 File 对象来确定保存位置。
  • takePicture() 函数使用提供的选项和执行器异步捕获图像。
  • OnImageSavedCallback 提供成功和失败的回调。
    • onImageSaved() 回调处理成功的图像捕获,并提供对保存的图像结果的访问。
    • onError() 回调处理图像捕获错误。

其他选项

如需了解配置 ImageCapture 的其他方法,请参阅配置优化、闪光灯和文件格式指南

更多资源

如需详细了解 CameraX,请查阅以下资源:

Codelab

  • CameraX 入门
  • 代码示例

  • CameraX 示例应用