CameraX は基本的に「露出」「ホワイトバランス」「フォーカス」が自動になりますが、「Camera2CameraControl」を取得して「CaptureRequestOptions」で「CONTROL_MODE_OFF」をリクエストすることで、「露出」「ホワイトバランス」「フォーカス」を手動設定(マニュアル設定)にすることができます。
なお、CameraXを使用してのカメラアプリの作り方は以下の記事を参考にしてください。
~ 手順 ~
それでは、手順を解説します。
① CameraX で Camera2 のコントロールを利用できるようにする「camera2CameraControl」を宣言します。
private lateinit var camera2CameraControl: Camera2CameraControl
② キャプチャーにリクエストするための「captureRequestOptionsBuilder」を宣言します。
private lateinit var captureRequestOptionsBuilder: CaptureRequestOptions.Builder
③ camera の CameraControl を「camera2CameraControl」にセットします。これで Camera2 のリクエストが Camer X で利用可能になります。
camera2CameraControl = Camera2CameraControl.from(camera.cameraControl)
camera は以下のように「cameraProvider.bindToLifecycle ( )」から取得します。
camera = cameraProvider.bindToLifecycle(
this,
cameraSelector,
preview3,
imageCapture,
videoCapture
)
④ キャプチャーリクエストビルダー(captureRequestOptionsBuilder)をインスタンス化し、以下をセットしてビルドします。
- CONTROL_MODE ⇒ コントロールモード
- CONTROL_MODE_OFF ⇒ オフにする
captureRequestOptionsBuilder = CaptureRequestOptions.Builder()
.setCaptureRequestOption(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_OFF)
captureRequestOptions = captureRequestOptionsBuilder.build()
⑤ ③で作成した「camera2CameraControl」に④のリクエストをセットします。これで、露出、ホワイトバランス、フォーカスがマニュアルモードになります。
camera2CameraControl.setCaptureRequestOptions(captureRequestOptions)
備考・まとめ
オートモードにするには、手順の④で以下をセットします。
- CONTROL_MODE ⇒ コントロールモード
- CONTROL_MODE_ON ⇒ オンにする
ご紹介した方法を応用することで CameraX でも Camera2 に近い細かいコントロールができるようになります。
END