【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 エフェクト
android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。
Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersのエフェクトに関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
エフェクト
カメラデバイスから取得するプレビュー・キャプチャデータのエフェクトを指定することができます。Camera.Parameters内にあるエフェクトに関連するデータのキーは下記のとおりです。
effect-values | カメラデバイスがサポートしているエフェクトリストのキーです。 |
effect | カメラデバイスに現在設定されているエフェクトのキーです。 |
カメラデバイスがサポートしているエフェクト
カメラデバイスがサポートしているエフェクトはListエフェクトは下記のCamera.Parametersで定義された定数で表されます。
String EFFECT_NONE | エフェクト無し |
String EFFECT_AQUA | 青色フィルターエフェクト |
String EFFECT_MONO | モノクロのエフェクト |
String EFFECT_NEGATIVE | ネガティブ変換エフェクト |
String EFFECT_POSTERIZE | ポスタライズ(減色処理)エフェクト |
String EFFECT_SEPIA | セピアエフェクト |
String EFFECT_SOLARIZE | ソラリゼーションエフェクト |
String EFFECT_BLACKBOARD | |
String EFFECT_WHITEBOARD |
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); List<String> supportedColorEffects = parameters.getSupportedColorEffects(); for (int i = 0; i < supportedColorEffects.size(); i++) { Log.d(TAG, "SupportedColorEffects: " + supportedColorEffects.get(i)); } mCamera.setParameters(parameters); }
エフェクトの取得と変更
エフェクトはString getColorEffect()で現在の値が取得できます。また、void setColorEffect(String value)を使ってエフェクトを変更することができます。
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); List<String> supportedColorEffects = parameters.getSupportedColorEffects(); for (int i = 0; i < supportedColorEffects.size(); i++) { Log.d(TAG, "SupportedColorEffects: " + supportedColorEffects.get(i)); } Log.d(TAG, "ColorEffect: " + parameters.getColorEffect()); String colorEffect = supportedColorEffects.get(supportedColorEffects.size() / 2); parameters.setColorEffect(colorEffect); mCamera.setParameters(parameters); }
エフェクトの注意点
エフェクトの設定値は下記の条件で例外が発生するので注意が必要です。- Camera.Parameters#getSupportedColorEffectsで取得した値以外の値を設定した状態でCamera#setParametersを使用すると例外が発生します。
- Camera.Parameters#removeで”effect”を削除した状態でCamera#setParametersを使用するとデフォルト値が使用されるようです。
- カメラプレビューが開始された状態でエフェクトを変更すると即時に反映されます。