画像をキャプチャする

このページでは、CameraX で高品質の画像をキャプチャする方法について説明します。これを行うには、ImageCapture クラスとその関連メソッドを使用します。

主なコンセプト

このドキュメントで説明する主なコンセプトは次のとおりです。

  • 保存方法: 画像はメモリ内バッファまたはファイルに直接キャプチャできます。
  • エグゼキュータ: ImageCapture は、コールバックと I/O オペレーションの処理にエグゼキュータを使用します。これらのエグゼキュータをカスタマイズして、パフォーマンスと制御を向上させることができます。
  • キャプチャ モード: レイテンシまたは画質を最適化するようにキャプチャ モードを構成できます。

保存方法

ImageCapture で画像をキャプチャする方法は 2 つあります。それぞれ ImageCapture.takePicture() のオーバーロードを使用します。

エグゼキュータ

takePicture を呼び出すときは、ExecutorOnImageCapturedCallback 関数または OnImageSavedCallback 関数のいずれかを渡します。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 のサンプルアプリ