我正在加载两个位图,一个用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
有什么想法吗?
答案 0 :(得分:3)
是的,我猜对了:)如果你查看文档(http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize),就会有一个关于它如何工作的说明。
如果计算数字,你可以看到3461/216 = 16和3461/173 = 20.这意味着png正在使用所需的样本大小,但jpg正在四舍五入到最接近的2的幂。