拍摄图片

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

主要概念

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

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

存储方法

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

执行器

调用 takePicture 时,您需要传递 Executor 和 OnImageCapturedCallback 或 OnImageSavedCallback 函数。Executor 运行回调并处理任何生成的 IO。

拍照

如需拍摄照片,您需要设置相机,然后调用 takePicture。

设置摄像头

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

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

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

拍照

配置相机后,调用 takePicture() 以拍摄照片。 此示例演示了如何使用 takePicture() 将图片保存到磁盘:

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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
            }
        }
    )
}

以下是有关此代码段的要点:

  • 借助 ImageCapture.OutputFileOptions,您可以配置保存位置和元数据。
    • 在此示例中,OutputFileOptions.Builder() 使用 File 对象来确定保存位置。
  • takePicture() 函数使用提供的选项和执行器异步捕获图像。
  • OnImageSavedCallback 提供成功和失败的回调。
    • onImageSaved() 回调可处理成功的图片拍摄,并提供对已保存图片结果的访问权限。
    • onError() 回调处理图片拍摄错误。

其他选项

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

更多资源

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

Codelab

  • CameraX 使用入门
  • 代码示例

  • CameraX 示例应用