圖片擷取

相片拍攝用途專為拍攝高解析度的高畫質相片所設計,提供了自動白平衡、自動曝光和自動對焦功能,以及簡單的相機手動控制功能。由呼叫端負責決定擷取圖片的用途,包括下列選項:

執行 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);

請注意,bindToLifecycle() 會傳回 Camera 物件。請參閱這份指南,以進一步瞭解如何調整相機輸出功能 (例如縮放和曝光)。

設定相機後,下列程式碼會針對使用者動作拍照:

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.
            }
       }
    );
}

圖片擷取方法支援 JPEG 格式。請參閱 YuvToRgbConverter.kt 程式碼範例,進一步瞭解如何將 YUV_420_888 格式的 Media.Image 物件轉換為 RGB Bitmap 物件。

其他資源

如要進一步瞭解 CameraX,請參閱下列其他資源。

程式碼研究室

  • 開始使用 CameraX
  • 程式碼範例

  • CameraX 範例應用程式