【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 アンチバンディング
android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。
Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersのアンチバンディングに関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
アンチバンディング
振動する光源下(ブラウン管テレビや蛍光灯など)で撮影した写真にはバンディングと呼ばれる線が入ることがあります。カメラデバイスにはバンディングを抑制するためにアンチバンディングと呼ばれる機能があります。
Camera.Parameters内にあるアンチバンディングに関連するデータのキーは下記のとおりです。
antibanding-values | カメラデバイスがサポートしているアンチバンディングリストのキーです。 |
antibanding | カメラデバイスに現在設定されているアンチバンディングのキーです。 |
カメラデバイスがサポートしているアンチバンディング
カメラデバイスがサポートしているアンチバンディングはListアンチバンディングは下記のCamera.Parametersで定義された定数で表されます。
String ANTIBANDING_OFF | アンチバンディング機能をオフにします。 |
String ANTIBANDING_50HZ | アンチバンディング機能の商用電源周波数が50HZの時に使用するモード |
String ANTIBANDING_60HZ | アンチバンディング機能の商用電源周波数が60HZの時に使用するモード |
String ANTIBANDING_AUTO | アンチバンディング機能の対応周波数を自動で切り替えるモード |
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); List<String> supportedAntibanding = parameters.getSupportedAntibanding(); for (int i = 0; i < supportedAntibanding.size(); i++) { Log.d(TAG, "SupportedAntibanding: " + supportedAntibanding.get(i)); } mCamera.setParameters(parameters); }
アンチバンディングの取得と変更
アンチバンディングはString getAntibanding()で現在の値が取得できます。また、void setAntibanding(String antibanding)を使ってアンチバンディングを変更することができます。
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); List<String> supportedAntibanding = parameters.getSupportedAntibanding(); for (int i = 0; i < supportedAntibanding.size(); i++) { Log.d(TAG, "SupportedAntibanding: " + supportedAntibanding.get(i)); } Log.d(TAG, "Antibanding: " + parameters.getAntibanding()); parameters.setAntibanding(Camera.Parameters.ANTIBANDING_OFF); mCamera.setParameters(parameters); }
アンチバンディングの注意点
アンチバンディングの設定値は一定の条件で例外が発生するので注意が必要です。- Camera.Parameters#getSupportedAntibandingで取得した値以外の値を設定した状態でCamera#setParametersを使用するとデフォルトが適用されるようです。
- Camera.Parameters#removeで”antibanding”を削除した状態でCamera#setParametersを使用するとデフォルトが適用されるようです。
- カメラプレビューが開始された状態でサムネイルサイズを変更すると即時に反映されます。