以下の内容はhttps://android-java.hatenablog.jp/entry/camerax-exposurecompensation-kotlinより取得しました。


【Android開発】CameraX に露出補正を追加する方法 - Kotlin

今回は、以前の記事【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

 




以上の内容はhttps://android-java.hatenablog.jp/entry/camerax-exposurecompensation-kotlinより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14