【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 オートホワイトバランスロック機能
android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。
Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersのオートホワイトバランスロック機能に関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
オートホワイトバランスロック機能
カメラデバイスにはオートホワイトバランスロック機能が実装されているものがあります。このオートホワイトバランスロック機能はカメラデバイスで行われるホワイトバランス処理を強制的に停止させる機能です。
Camera.Parameters内にあるオートホワイトバランスロック機能に関連するデータのキーは下記のとおりです。
auto-whitebalance-lock-supported | カメラデバイスがオートホワイトバランスロック機能をサポートしているかどうかキーです。 |
auto-whitebalance-lock | カメラデバイスに現在オートホワイトバランスロック機能が有効かどうかのキーです。 |
オートホワイトバランスロック機能サポートの有無
カメラデバイスがオートホワイトバランスロック機能をサポートしているかどうかはboolean isAutoWhiteBalanceLockSupported()で取得することができます。trueの場合はオートホワイトバランスロック機能を使用することができ、falseの場合は使用できません。
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); Log.d(TAG, "AutoWhiteBalanceLockSupported: " + parameters.isAutoWhiteBalanceLockSupported()); mCamera.setParameters(parameters); }
オートホワイトバランスロック機能の取得と変更
オートホワイトバランスロック機能はboolean getAutoWhiteBalanceLock()で現在の値が取得できます。また、void setAutoWhiteBalanceLock(boolean toggle)を使ってオートホワイトバランスロック機能を変更することができます。
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); Log.d(TAG, "AutoWhiteBalanceLockSupported: " + parameters.isAutoWhiteBalanceLockSupported()); parameters.setAutoWhiteBalanceLock(true); mCamera.setParameters(parameters); }
オートホワイトバランスロック機能の注意点
オートホワイトバランスロック機能の設定値は下記の条件で例外が発生するので注意が必要です。- Camera.Parameters#removeで”auto-whitebalance-lock”を削除した状態でCamera#setParametersを使用するとデフォルト値が使用されるようです。
- オートホワイトバランスロック機能が有効化された状態でCamera.Parameters#setWhiteBalanceを変更してもプリセットホワイトバランスは変更されません。
- カメラプレビューが開始された状態でオートホワイトバランスロック機能の有効無効は即時に反映されます。
- カメラプレビューが停止してもオートホワイトバランスロック機能の有効無効は変更されません。