【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 写真フォーマット

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

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

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

写真フォーマット

カメラデバイスにキャプチャした写真データのフォーマットを設定することができます。
Camera.Parameters内にある写真フォーマットに関連するデータのキーは下記のとおりです。
picture-format-valuesカメラデバイスがサポートしている写真フォーマットのキーです。
picture-formatカメラデバイスに現在設定されている写真フォーマットのキーです。

カメラデバイスがサポートしている写真フォーマット

カメラデバイスがサポートしている写真フォーマットはList getSupportedPictureFormats()で取得することができます。
リストはImageFormatで定義されている定数がが使われます。


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


写真フォーマットの取得と変更

写真フォーマットはint getPictureFormat()で現在の値が取得できます。
また、void setPictureFormat(int pixel_format)を使って写真フォーマットを変更することができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<Integer> supportedPictureFormats = parameters.getSupportedPictureFormats();
        for (int i = 0; i < supportedPictureFormats.size(); i++) {
            Log.d(TAG, "SupportedPictureFormats: " + supportedPictureFormats.get(i));
        }
        int pictureFormat = parameters.getPictureFormat();
        Log.d(TAG, "PictureFormat: " + pictureFormat);
        parameters.setPictureFormat(ImageFormat.JPEG);
        mCamera.setParameters(parameters);
    }


写真フォーマットの注意点

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