今回は、以前の記事【Android開発】CameraX でカメラアプリを作ってみよう(言語:Kotlin)の前編/後編で作った簡単なカメラアプリに「露出補正機能」を追加する方法を解説します。
※CameraX での露出補正の仕方が今一つわからない・・・という方は、ぜひ参考にしてください。
~ CameraX の露出補正 ~
・露出補正
露出補正をする方法にはいくつかありますが、管理人は「CameraControl」の「setExposureCompensationIndex」に補正値を設定して露出を補正しています。
camera.cameraControl.setExposureCompensationIndex ( 露出補正値 )
・camera の取得方法
上のコードの中にある「camera」は、プレビューするためのコード「startPreview ( )」の中にある「cameraProvider.bindToLifecycle (…)」の部分から取得します。
//プレビュー開始
private fun startPreview() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
//プレビュー設定
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(viewBinding.preview.surfaceProvider)
}
//静止画撮影設定
imageCapture = ImageCapture.Builder().build()
//動画撮影設定
val recorder = Recorder.Builder()
.setQualitySelector(QualitySelector.from(Quality.HIGHEST))
.build()
videoCapture = VideoCapture.withOutput(recorder)
//カメラセレクター
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
cameraProvider.unbindAll()
camera = cameraProvider.bindToLifecycle(
this,
cameraSelector,
preview,
imageCapture,
videoCapture
)
} catch (e: Exception) {
Log.d("CameraX sample","エラーが発生しました", e)
}
}, ContextCompat.getMainExecutor(this))
}
・露出補正の範囲
露出補正ができる範囲(レンジ)はカメラによって異なるので、次のコードで参照します。ちなみに、管理人がテスト用で使っているスマートフォン(SHARP S5-SH)で露出補正の範囲を取得したところ「-12~+12」でした。
CameraManager.CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE
・露出補正ステップ
露出補正の範囲はわかりましたが、これだけでは露出補正のステップ(刻み)がわからないので露出補正のステップも取得します。(SHARP S5-SH は1/6ステップ)
CameraManager.CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP
~ 露出補正のコード例 ~
「camera」から利用できる「cameraControl」の「setExposureCompensationIndex ( )」に補正したい値をセットすると露出を補正することができます。以下はボタンを押したときに補正値を上下して露出を補正するコード例です。
//露出補正(+)
viewBinding.buttonRplus.setOnClickListener {
hosei += 1
camera.cameraControl.setExposureCompensationIndex (hosei)
}
//露出補正(-)
viewBinding.buttonRminus.setOnClickListener {
hosei -= 1
camera.cameraControl.setExposureCompensationIndex (hosei)
}
備考・まとめ
CameraX の露出補正機能を追加するのは比較的かんたんです。ポイントさえ理解すればすぐに追加できるはずです。
管理人のスマートフォン(SHARP S5-SH)の露出補正範囲は「-12~+12」、ステップは「1/6」なので、この機種の露出補正量はプラス側もマイナス側も「1/6ステップの2段」だということがわかります。
ただ、機種によってはステップが1/3刻みや1/2刻みだったり、補正量が「3段」だったりしますので、アプリ内に露出補正値を表示する場合は、機種ごとに露出補正範囲とステップ確認して正確な補正値を表示する必要があるでしょう。
END