【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 サムネイルサイズ

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

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

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

サムネイルサイズ

JPEGファイル内部にサムネイルを設定することができます。
カメラデバイスにキャプチャした写真データで作られたJPEGファイルのサムネイルサイズを設定することができます。
サムネイルサイズはCamera.Sizeで縦と横を指定することができます。
Camera.Parameters内にあるサムネイルサイズに関連するデータのキーは下記のとおりです。
jpeg-thumbnail-size-valuesカメラデバイスがサポートしているサムネイルサイズリストのキーです。
jpeg-thumbnail-heightカメラデバイスに現在設定されているサムネイルサイズの高さキーです。
jpeg-thumbnail-widthカメラデバイスに現在設定されているサムネイルサイズの幅のキーです。

カメラデバイスがサポートしているサムネイルサイズ

カメラデバイスがサポートしているサムネイルサイズはList getSupportedJpegThumbnailSizes()で取得することができます。

    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<Camera.Size> supportedPictureSizes = parameters.getSupportedPictureSizes();
        for (int i = 0; i < supportedJpegThumbnailSizes.size(); i++) {
            Camera.Size size = supportedJpegThumbnailSizes.get(i);
            Log.d(TAG, "JpegThumbnailSizes: " + i + " | height - " + size.height + "| width - " + size.width );
        }
        mCamera.setParameters(parameters);
    }


サムネイルサイズの取得と変更

サムネイルサイズはCamera.Size getJpegThumbnailSize()で現在の値が取得できます。
また、void setJpegThumbnailSize(int width, int height)を使ってサムネイルサイズを変更することができます。
Camera.Parameters#setJpegThumbnailSizeで高さ・幅を0にするとサムネイルを保存されません。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        List<Camera.Size> supportedJpegThumbnailSizes = parameters.getSupportedJpegThumbnailSizes();
        for (int i = 0; i < supportedJpegThumbnailSizes.size(); i++) {
            Camera.Size size = supportedJpegThumbnailSizes.get(i);
            Log.d(TAG, "JpegThumbnailSizes: " + i + " | height - " + size.height + "| width - " + size.width );
        }

        Camera.Size jpegThumbnailSize = parameters.getJpegThumbnailSize();
        Log.d(TAG, "JpegThumbnailSizes: height - " + jpegThumbnailSize.height + "| width - " + jpegThumbnailSize.width );
        parameters.setJpegThumbnailSize(0,0);
        mCamera.setParameters(parameters);
    }


サムネイルサイズの注意点

サムネイルサイズの設定値は一定の条件で例外が発生するので注意が必要です。
  1. Camera.Parameters#getSupportedJpegThumbnailSizesで取得した値以外の値を設定した状態でCamera#setParametersを使用すると例外が発生します。
  2. Camera.Parameters#removeで”jpeg-thumbnail-height”または”jpeg-thumbnail-width”を削除した状態でCamera#setParametersを使用すると例外が発生します。
  3. カメラプレビューが開始された状態でサムネイルサイズを変更すると即時に反映されます。