1. BitmapFactory.Options
options.inSampleSize,它的取值应该是2的次方:1、2、4、8…
表示宽高都是原来的1/1, 1/2, 1/4, 1/8…
如果设置的值 < 1,那么效果就和 =1是一样的
再调用BitmapFactory的相关decode方法,传入options参数,即可得到一张缩小后的图片。
附上一段计算inSampleSize的方法:
static 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;
}
2. Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
以source的x,y为起点,宽w高h的范围,进行matrix变化。
这里只讨论缩放,那么matrix肯定是添加了scale操作。
要注意的是这里的参数x、y、width、height都是相对于source原图的。
如果x=y=0; w=source.getWidth()/2, h=source.getHeight()/2;scale=2;
那么最后的效果,只是取原图的左上四分之一的部份…并对这部份进行2倍放大
3. Bitmap.createScaledBitmap(bitmap, w, h, boolean filter);
以w,h为目标对bitmap进行缩放,filter表示是否要对位图进行过滤(滤波)处理
这个方法的效果就类似于ImageView.ScaleType.FIT_XY