1. 程式人生 > >Android 縮放圖片的幾種方式說明

Android 縮放圖片的幾種方式說明

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