图片拍摄

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

  • takePicture(OnImageCapturedListener):此方法用于为拍摄的图片提供内存缓冲区。
  • takePicture(File, OnImageSavedListener):此方法将拍摄的图片保存到提供的文件位置。
  • takePicture(File, OnImageSavedListener, Metadata):您可以此方法指定要嵌入已保存文件的 Exif 中的元数据。

实现

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

要优化照片拍摄的延迟时间,请将 ImageCapture.CaptureMode 设置为 MIN_LATENCY。要优化照片质量,请将其设置为 MAX_QUALITY

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

Kotlin

    val imageCaptureConfig = ImageCaptureConfig.Builder()
        .setTargetRotation(windowManager.defaultDisplay.rotation)
        .build()

    val imageCapture = ImageCapture(imageCaptureConfig)

    CameraX.bindToLifecycle(this as LifecycleOwner,
        imageCapture, imageAnalysis, preview)
    

Java

    ImageCaptureConfig config =
        new ImageCaptureConfig.Builder()
            .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
            .build();

    ImagesCapture imageCapture = new ImageCapture(config);

    CameraX.bindToLifecycle((LifecycleOwner) this, imageCapture, imageAnalysis, preview);
    

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

Kotlin

    fun onClick() {
        val file = File(...)
        imageCapture.takePicture(file,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.UseCaseError,
                                     message: String, exc: Throwable?) {
                    // insert your code here.
                }
                override fun onImageSaved(file: File) {
                    // insert your code here.
                }
            })
    }
    

Java

    public void onClick() {
        File file = new File(...);

        imageCapture.takePicture(file,
            new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(File file) {
                    // insert your code here.
                }
                @Override
                public void onError(
                        ImageCapture.UseCaseError useCaseError,
                        String message,
                        Throwable cause) {
                    // insert your code here.
                }
        }
    }
    

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

其他资源

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

Codelab

  • CameraX 使用入门
  • 向应用中添加 CameraView 片段
  • 代码示例

  • 官方 CameraX 示例应用