拍摄图片

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

主要概念

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

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

存储方法

您可以通过两种方式使用 ImageCapture 拍摄图片。它们各自使用 ImageCapture.takePicture() 的重载:

执行器

调用 takePicture 时,您需要传递 Executor 以及 OnImageCapturedCallbackOnImageSavedCallback 函数。Executor 会运行回调并处理任何生成的 IO。

拍照

如需拍照,请设置相机,然后调用 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 示例应用