【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 撮影シーンモード
android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。
Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersの撮影シーンモードに関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
撮影シーンモード
カメラデバイスから取得するプレビュー・キャプチャデータの撮影シーンモードを指定することができます。指定することで、状況に合わせた撮影シーンモードを使用して撮影することができます。 Camera.Parameters内にある撮影シーンモードに関連するデータのキーは下記のとおりです。
scene-mode-values | カメラデバイスがサポートしている撮影シーンモードリストのキーです。 |
scene-mode | カメラデバイスに現在設定されている撮影シーンモードのキーです。 |
カメラデバイスがサポートしている撮影シーンモード
カメラデバイスがサポートしている撮影シーンモードはListエフェクトは下記の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_HDR | HDRを使った撮影モードです。キャプチャの取得するまでに時間がかかる可能性があります。 |
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); }
撮影シーンモードの注意点
撮影シーンモードの設定値は下記の条件で例外が発生するので注意が必要です。- Camera.Parameters#getSupportedSceneModesで取得した値以外の値を設定した状態でCamera#setParametersを使用すると例外が発生します。
- Camera.Parameters#removeで”scene-mode”を削除した状態でCamera#setParametersを使用するとデフォルト値が使用されるようです。
- カメラプレビューが開始された状態で撮影シーンモードを変更すると即時に反映されます。