3

2 つのビットマップをロードしています。1 つは jpg で、もう 1 つは png 形式です。画像はまったく同じで、同じ解像度 (3461x2480) で保存されています。

InSampleSize で同じスケールの BitmapFactory.decodeFile() を使用して画像をロードすると、さまざまなサイズのメモリ ビットマップが取得されます。jpg は png よりわずかに大きくなります。両方をギャラリーに表示していますが、違いは明らかです。LogCat でビットマップ サイズを出力し、ロード後にサイズが異なることを確認しました。どちらのイメージも外部ストレージにあり、同じディレクトリにあります。

一度読み込まれたサイズが異なる理由を知っている人はいますか? どうすればそれを制御できますか?

私が使用しているコードは次のとおりです。

public static Bitmap loadImageScaled(String fileName, int width, int height){

    // Get the dimensions of the bitmap
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    bmOptions.inJustDecodeBounds = true;

    BitmapFactory.decodeFile(fileName, bmOptions);

    int photoW = bmOptions.outWidth;
    int photoH = bmOptions.outHeight;

    Log.d(TAG, "Image w= " + photoW + " h=" + photoH + " " + fileName);
    Log.d(TAG, "In    w= " + width + " h=" + height);

    // Determine how much to scale down the image
    int scaleFactor = Math.min(photoW/width, photoH/height);
    Log.d(TAG, "scaleFactor = " + scaleFactor);

    // Decode the image file into a Bitmap
    bmOptions.inJustDecodeBounds = false;
    bmOptions.inSampleSize = scaleFactor;
    bmOptions.inPurgeable = true;

    Bitmap bitmap = BitmapFactory.decodeFile(fileName, bmOptions);

    Log.d(TAG, "Out   w= " + bitmap.getWidth() + " h=" + bitmap.getHeight());

    return bitmap;
}

LogCat では、次のメッセージが表示されます。

Image w= 3461 h=2480 Img09.jpg
In    w= 173 h=124
scaleFactor = 20
Out   w= 216 h=155

Image w= 3461 h=2480 Img10.png
In    w= 173 h=124
scaleFactor = 20
Out   w= 173 h=124

何か案が?

4

1 に答える 1

3

はい、大丈夫だと思います:) ドキュメント( http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize )を見ると、それがどのように機能するかについてのメモがあります。

数値を計算すると、3461/216 = 16 および 3461/173 = 20 であることがわかります。これは、png は必要なサンプル サイズを使用しているが、jpg は最も近い 2 のべき乗に丸められていることを意味します。

于 2013-06-12T20:25:16.127 に答える