在jpg和png中加载相同的图像会导致不同的位图大小

时间:2013-06-12 19:35:52

标签: android image

我正在加载两个位图,一个用jpg,另一个用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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

是的,我猜对了:)如果你查看文档(http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize),就会有一个关于它如何工作的说明。

如果计算数字,你可以看到3461/216 = 16和3461/173 = 20.这意味着png正在使用所需的样本大小,但jpg正在四舍五入到最接近的2的幂。