【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 フラッシュライト

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

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

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

フラッシュライト

カメラデバイスには幾つかのフラッシュライトモードが実装されています。
Camera.Parameters内にあるフラッシュライトに関連するデータのキーは下記のとおりです。
flash-mode-valuesカメラデバイスがサポートしているフラッシュライトモードリストのキーです。
flash-modeカメラデバイスに現在設定されているフラッシュライトモードのキーです。

カメラデバイスがサポートしているフラッシュライトモード

カメラデバイスがサポートしているフラッシュライトモードはList getSupportedFlashModes()で取得することができます。
フラッシュライトモードは下記のCamera.Parametersで定義された定数で表されます。 赤目軽減のフラッシュライトが点灯するモードです。
String FLASH_MODE_OFFフラッシュライトが点灯しないモードです。
String FLASH_MODE_ONフラッシュライトは常にスナップショット中に起動されます。プレビュー中・オートフォーカス中に点灯することがあります。
String FLASH_MODE_AUTO必要に応じてフラッシュライトが点灯するモードです。プレビュー中・オートフォーカス中・スナップショット中に点灯することがあります。
String FLASH_MODE_RED_EYE
String FLASH_MODE_TORCHフラッシュライトが常に点灯するモードです。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        for (int i = 0; i < supportedFlashModes.size(); i++) {
            Log.d(TAG, "SupportedFlashModes: " + supportedFlashModes.get(i));
        }
        mCamera.setParameters(parameters);
    }


フラッシュライトモードの取得と変更

フラッシュライトモードはString getFlashMode()で現在の値が取得できます。
また、void setFlashMode(String value)を使ってフラッシュライトモードを変更することができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<String> supportedFlashModes = parameters.getSupportedFlashModes();
        for (int i = 0; i < supportedFlashModes.size(); i++) {
            Log.d(TAG, "SupportedFlashModes: " + supportedFlashModes.get(i));
        }
        Log.d(TAG, "FlashMode: " + parameters.getFlashMode());
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        mCamera.setParameters(parameters);
    }


フラッシュライトモードの注意点

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