【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 露出補正

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。

Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersの露出補正に関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。

露出補正

カメラデバイスには露出補正が実装されているものがあります。
Camera.Parameters内にある露出補正に関連するデータのキーは下記のとおりです。
max-exposure-compensationカメラデバイスがサポートしている最大露出補正指数のキーです。
min-exposure-compensationカメラデバイスがサポートしている最小露出補正指数のキーです。
exposure-compensation-stepカメラデバイスがサポートしている露出補正ステップのキーです。
exposure-compensationカメラデバイスに現在設定されている露出補正指数のキーです。

カメラデバイスの最大・最小露出補正指数

カメラデバイスがサポートしている最大露出補正指数はint getMaxExposureCompensation()、最大露出補正指数はint getMinExposureCompensation()でそれぞれ取得することができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        Log.d(TAG, "MaxExposureCompensation: " + parameters.getMaxExposureCompensation());
        Log.d(TAG, "MinExposureCompensation: " + parameters.getMinExposureCompensation());
        mCamera.setParameters(parameters);
    }


露出補正指数の取得と変更

露出補正指数はint getExposureCompensation()で現在の値が取得できます。
また、void setExposureCompensation(int value)を使って露出補正指数を変更することができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        Log.d(TAG, "MaxExposureCompensation: " + parameters.getMaxExposureCompensation());
        Log.d(TAG, "MinExposureCompensation: " + parameters.getMinExposureCompensation());
        Log.d(TAG, "ExposureCompensation: " + parameters.getExposureCompensation());
        parameters.setExposureCompensation(10);
        mCamera.setParameters(parameters);
    }

露出補正指数のステップ値

露出補正の値はEVという単位で表されます。
EV値は露出補正指数と露出補正ステップ値を掛け合わせて求めることができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        Log.d(TAG, "MaxExposureCompensation: " + parameters.getMaxExposureCompensation());
        Log.d(TAG, "MinExposureCompensation: " + parameters.getMinExposureCompensation());
        Log.d(TAG, "ExposureCompensation: " + parameters.getExposureCompensation());
        parameters.setExposureCompensation(10);
        Log.d(TAG, "ExposureCompensationStep: " + parameters.getExposureCompensationStep());
        mCamera.setParameters(parameters);
    }


露出補正の注意点

露出補正の設定値は下記の条件で例外が発生するので注意が必要です。
  1. Camera.Parameters#getMaxExposureCompensationとCamera.Parameters#getMinExposureCompensationで取得した値の範囲外の値を設定した状態でCamera#setParametersを使用すると例外が発生します。
  2. Camera.Parameters#removeで”exposure-compensation”を削除した状態でCamera#setParametersを使用するとデフォルトが使用されます。
  3. カメラプレビューが開始された状態で露出補正を変更すると即時に反映されます。