画像をキャプチャする

このページでは、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 のサンプルアプリ