Android 縮放圖片的幾種方式說明
阿新 • • 發佈:2019-02-14
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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
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