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
何か案が?