画像をキャプチャする

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

主なコンセプト

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

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

保存方法

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

エグゼキュータ

takePicture を呼び出すときは、Executor と OnImageCapturedCallback 関数または OnImageSavedCallback 関数を渡します。Executor はコールバックを実行し、結果として生じる IO を処理します。

写真を撮影

写真を撮影するには、カメラを設定してから takePicture を呼び出します。

カメラをセットアップする

カメラをセットアップするには、CameraProvider を作成します。次に、ImageCapture オブジェクトを作成します。ImageCapture.Builder() を使用します。

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

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

写真の撮影

カメラを設定したら、takePicture() を呼び出して画像をキャプチャします。次の例は、takePicture() を使用して画像をディスクに保存する方法を示しています。

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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
            }
        }
    )
}

このスニペットに関する重要なポイントは次のとおりです。

  • ImageCapture.OutputFileOptions を使用すると、保存場所とメタデータを構成できます。
    • ここで、OutputFileOptions.Builder() は File オブジェクトを使用して保存場所を決定します。
  • takePicture() 関数は、指定されたオプションとエグゼキュータを使用して画像を非同期的にキャプチャします。
  • OnImageSavedCallback は、成功と失敗のコールバックを提供します。
    • onImageSaved() コールバックは、画像キャプチャの成功を処理し、保存された画像の結果へのアクセスを提供します。
    • onError() コールバックは、画像キャプチャ エラーを処理します。

その他のオプション

ImageCapture を構成するその他の方法については、最適化、書き込み、ファイル形式の構成ガイドをご覧ください。

その他のリソース

CameraX について詳しくは、以下のリソースをご覧ください。

Codelab

  • CameraX のスタートガイド
  • コードサンプル

  • CameraX のサンプルアプリ