【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 エフェクト

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

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

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

エフェクト

カメラデバイスから取得するプレビュー・キャプチャデータのエフェクトを指定することができます。
Camera.Parameters内にあるエフェクトに関連するデータのキーは下記のとおりです。
effect-valuesカメラデバイスがサポートしているエフェクトリストのキーです。
effectカメラデバイスに現在設定されているエフェクトのキーです。

カメラデバイスがサポートしているエフェクト

カメラデバイスがサポートしているエフェクトはList getSupportedColorEffects()で取得することができます。
エフェクトは下記の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);
    }


エフェクトの注意点

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