【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 プリセットホワイトバランス

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

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

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

プリセットホワイトバランス

カメラデバイスにはプリセットホワイトバランス(白いものが白く映るように補正する)機能が実装されているものがあります。
このプリセットホワイトバランスは撮影時の光の状態によって使い分ける必要があります。
Camera.Parameters内にあるプリセットホワイトバランスに関連するデータのキーは下記のとおりです。
whitebalance-valuesカメラデバイスがサポートしているプリセットホワイトバランスリストのキーです。
whitebalanceカメラデバイスに現在設定されているプリセットホワイトバランスのキーです。

カメラデバイスがサポートしているプリセットホワイトバランス

カメラデバイスがサポートしているプリセットホワイトバランスはList getSupportedWhiteBalance()で取得することができます。
プリセットホワイトバランスは下記のCamera.Parametersで定義された定数で表されます。
String WHITE_BALANCE_AUTOオートでホワイトバランスです。
String WHITE_BALANCE_CLOUDY_DAYLIGHT曇り・日中のプリセットホワイトバランスです。
String WHITE_BALANCE_DAYLIGHT日中のプリセットホワイトバランスです。
String WHITE_BALANCE_FLUORESCENT蛍光灯時のプリセットホワイトバランスです。
String WHITE_BALANCE_INCANDESCENT白熱灯時のプリセットホワイトバランスです。
String WHITE_BALANCE_SHADE日陰時のプリセットホワイトバランスです。
String WHITE_BALANCE_TWILIGHT夕暮れ時のプリセットホワイトバランスです。
String WHITE_BALANCE_WARM_FLUORESCENTオレンジ色の蛍光灯時のプリセットホワイトバランスです。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<String> supportedWhiteBalance = parameters.getSupportedWhiteBalance();
        for (int i = 0; i < supportedWhiteBalance.size(); i++) {
            Log.d(TAG, "SupportedWhiteBalance: " + supportedWhiteBalance.get(i));
        }
        mCamera.setParameters(parameters);
    }


プリセットホワイトバランスの取得と変更

プリセットホワイトバランスはString getWhiteBalance()で現在の値が取得できます。
また、void setWhiteBalance(String value)を使ってプリセットホワイトバランスを変更することができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<String> supportedWhiteBalance = parameters.getSupportedWhiteBalance();
        for (int i = 0; i < supportedWhiteBalance.size(); i++) {
            Log.d(TAG, "SupportedWhiteBalance: " + supportedWhiteBalance.get(i));
        }
        Log.d(TAG, "WhiteBalance: " + parameters.getWhiteBalance());
        parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_DAYLIGHT);
        mCamera.setParameters(parameters);
    }


プリセットホワイトバランスの注意点

プリセットホワイトバランスの設定値は下記の条件で例外が発生するので注意が必要です。
  1. Camera.Parameters#getSupportedWhiteBalanceで取得した値以外の値を設定した状態でCamera#setParametersを使用すると例外が発生します。
  2. Camera.Parameters#removeで”whitebalance”を削除した状態でCamera#setParametersを使用するとデフォルト値が使用されるようです。
  3. カメラプレビューが開始された状態でプリセットホワイトバランスを変更すると即時に反映されます。