このページでは、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()
を使用します。
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
コードサンプル