Android图片压缩学习
很多情况下需要对一张分辨率特别高的图片进行压缩,
不然会导致在很小的控件上使用了一张非常大分辨率的图片而OOM
在BItmapFactory.Options中设置inSampleSize的值,比如一个20148X1536的图片, inSampleSize设置为4,那么会产出一个512X384大小的bitmap
获取图片大小
public int calculateInSampleSize(
BitmapFactory.Options options,int reqWidth, int reqHeight
){
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if(height > reqHeight || width > reqWidth){
final int halfHeight = height/2;
final int halfWidth = width/2;
while ((halfHeight / inSampleSize) > reqHeight
|| (halfWidth / inSampleSize) > reqWidth)
{
inSampleSize *= 2;
}
}
return inSampleSize;
}
加载图片压缩图片
public Bitmap decodeSampledBitmapFormResoure(int res,int reqWidth,int reqHeight){
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(),res,options);
options.inSampleSize = calculateInSampleSize(options,reqWidth,reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(getResources(),res,options);
}