【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 撮影シーンモード

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

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

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

撮影シーンモード

カメラデバイスから取得するプレビュー・キャプチャデータの撮影シーンモードを指定することができます。
指定することで、状況に合わせた撮影シーンモードを使用して撮影することができます。 Camera.Parameters内にある撮影シーンモードに関連するデータのキーは下記のとおりです。
scene-mode-valuesカメラデバイスがサポートしている撮影シーンモードリストのキーです。
scene-modeカメラデバイスに現在設定されている撮影シーンモードのキーです。

カメラデバイスがサポートしている撮影シーンモード

カメラデバイスがサポートしている撮影シーンモードはList getSupportedSceneModes()で取得することができます。
エフェクトは下記のCamera.Parametersで定義された定数で表されます。
String SCENE_MODE_AUTO撮影シーンモード機能オフ
String SCENE_MODE_ACTION動きが早い対象の撮影に最適化されたモードです。
String SCENE_MODE_BARCODEバーコード読み取りに最適化されたモードです。
String SCENE_MODE_BEACHビーチでの撮影に最適化されたモードです。
String SCENE_MODE_CANDLELIGHTキャンドルに照らされた自然な色合いの撮影に最適化されたモードです。
String SCENE_MODE_FIREWORKS花火の撮影に最適化されたモードです。
String SCENE_MODE_HDRHDRを使った撮影モードです。キャプチャの取得するまでに時間がかかる可能性があります。
String SCENE_MODE_LANDSCAPE風景などの遠くにあるものを撮影するのに最適化されたモードです。
String SCENE_MODE_NIGHT夜の撮影に最適化されたモードです
String SCENE_MODE_NIGHT_PORTRAIT夜の人物撮影に最適化されたモードです。
String SCENE_MODE_PARTY室内撮影に最適化されたモードです。
String SCENE_MODE_PORTRAIT人物撮影に最適化されたモードです。
String SCENE_MODE_SNOW雪の上での撮影に最適化されたモードです。
String SCENE_MODE_SPORTSスポーツの撮影に最適化されたモードです。
String SCENE_MODE_STEADYPHOTOぼやけを極力排する撮影に最適化されたモードです。
String SCENE_MODE_SUNSET夕焼け時の撮影に最適化されたモードです。
String SCENE_MODE_THEATREシアターでの撮影に最適化されたモードです。フラッシュライトがoffになります。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<String> supportedSceneModes = parameters.getSupportedSceneModes();
        for (int i = 0; i < supportedSceneModes.size(); i++) {
            Log.d(TAG, "SupportedSceneModes: " + supportedSceneModes.get(i));
        }
        mCamera.setParameters(parameters);
    }


撮影シーンモードの取得と変更

撮影シーンモードはString getSceneMode()で現在の値が取得できます。
また、void setSceneMode(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, "SceneMode: " + parameters.getSceneMode());
        String scene = supportedSceneModes.get(supportedSceneModes.size() / 2);
        parameters.setSceneMode(scene);
        mCamera.setParameters(parameters);
    }


撮影シーンモードの注意点

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