このページでは、CameraX で高品質の画像をキャプチャする方法について説明します。これを行うには、ImageCapture クラスとその関連メソッドを使用します。
主なコンセプト
このドキュメントで説明する主なコンセプトは次のとおりです。
- 保存方法: 画像は、メモリ内バッファまたはファイルに直接キャプチャできます。
- エグゼキュータ:
ImageCaptureは、コールバックと I/O オペレーションの処理にエグゼキュータを使用します。これらのエグゼキュータをカスタマイズして、パフォーマンスと制御を向上させることができます。 - キャプチャ モード: レイテンシまたは画質を最適化するようにキャプチャ モードを構成できます。
保存方法
ImageCapture で画像をキャプチャする方法は 2 つあります。それぞれ ImageCapture.takePicture() のオーバーロードを使用します。
ファイル:
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)を使用して、キャプチャした画像をディスク上のファイルに直接保存します。- これが最も一般的な写真の撮影方法です。
メモリ内:
takePicture(Executor, OnImageCapturedCallback)を使用して、キャプチャした画像のメモリ内バッファを受け取ります。- これは、リアルタイムの画像処理や分析に役立ちます。
エグゼキュータ
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
コードサンプル