拍摄图片

本页介绍了如何使用 CameraX 拍摄高品质图片。您可以使用 ImageCapture 类及其关联的方法执行此操作。

主要概念

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

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

存储方法

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

执行器

调用 takePicture 时,您需要传递 ExecutorOnImageCapturedCallbackOnImageSavedCallback 函数。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 示例应用