图片拍摄

图片拍摄用例旨在拍摄高分辨率的优质照片,不仅提供简单的相机手动控制功能,还提供自动白平衡、自动曝光和自动对焦 (3A) 功能。调用程序负责决定如何使用拍摄的照片,具体包括以下选项:

运行 ImageCapture 的可自定义执行程序有两种类型:回调执行程序和 IO 执行程序。

  • 回调执行程序是 takePicture 方法的参数。它用于执行用户提供的 OnImageCapturedCallback
  • 如果调用方选择将图片保存到文件位置,您可以指定执行程序以执行 IO。如需设置 IO 执行程序,请调用 ImageCapture.Builder.setIoExecutor(Executor)。如果执行程序不存在,则默认 CameraX 为任务的内部 IO 执行程序。

实现

提供了拍照所需的基本控制功能。照片是使用闪光灯选项和连续自动对焦拍摄的。

如需缩短照片拍摄的延迟时间,请将 ImageCapture.CaptureMode 设置为 CAPTURE_MODE_MINIMIZE_LATENCY。如需优化照片质量,请将其设置为 CAPTURE_MODE_MAXIMIZE_QUALITY

以下代码示例展示了如何配置应用以拍摄照片:

Kotlin

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

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

Java

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

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

配置好相机后,以下代码会根据用户操作拍照:

Kotlin

    fun onClick() {
        val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...))
        imageCapture.takePicture(outputFileOptions,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.ImageCaptureError,
                                     message: String, exc: Throwable?) {
                    // 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,
            new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                    // insert your code here.
                }
                @Override
                public void onError(
                        ImageCapture.ImageCaptureError imageCaptureError,
                        String message,
                        Throwable cause) {
                    // insert your code here.
                }
        }
    }
    

图片拍摄方法完全支持 JPEG 格式。

其他资源

要详细了解 CameraX,请参阅下面列出的其他资源。

Codelab

  • CameraX 使用入门
  • 代码示例

  • 官方 CameraX 示例应用