3

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

任何想法?

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 回答