在android應用開發中會出現很多需要實現圖片縮放的地方,或者是出於美觀,或者是出於節省記憶體。。
在這裡博主總結了幾種比較常用的圖片縮放的方法
第一種:通過 BitmapFactory.Options
BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeFile(picpathString, opts); //只把圖片的邊界資訊載入到記憶體,節省記憶體 Log.i(TAG, "opts.outHeight=======>" + opts.outHeight); Log.i(TAG, "opts.outWidth=====>" + opts.outWidth); if (opts.outHeight != 0 && opts.outWidth != 0) { opts.inSampleSize = (int) ((opts.outWidth * 5) / width); //inSampleSize這個參數是壓縮的倍數,具體可以自己調節,必須是int Log.i(TAG, "opt.inSampleSize---->" + opts.inSampleSize); } opts.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(picpathString, opts); //此時得到的bitmap就是壓縮後的bitmap了
第二種:通過 matrix
// 擷取這個圖片的寬度和高度 int width = _cameraImage.getWidth(); int hegith = _cameraImage.getHeight(); // 建立操作圖片用的Matrix對象 Matrix matrix = new Matrix(); int degree = 90; Log.i(TAG, "degree--->" + degree); // 旋轉圖片 matrix.postRotate(degree); matrix.postScale(NewscaleWidth, NewscaleHeight);//縮放圖片 // 建立新的圖片 Bitmap resizedBitmap = null; resizedBitmap = Bitmap.createBitmap(_cameraImage, 0, 0, width, hegith, matrix, true);
第三種:通過canvas對bitmap重繪得到縮放圖
Rect r = bitmap.getCropRect();//這個方法要自己寫得到原bitmap所佔的矩形地區 int width = r.width(); // CR: final == happy panda! int height = r.height(); Bitmap newbitmap = null; newbitmap= Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);{ Canvas canvas = new Canvas(newbitmap); Rect dstRect = new Rect(0, 0, new_width, new_height); //要把原圖縮放到多大的矩形地區 Paint paint = new Paint(); paint.setAntiAlias(true); canvas.drawBitmap(newbitmap, r, dstRect, paint); //縮放成功 }
第四種方法:ThumbnailUtils
Bitmap newbitmap = null; newbitmap = ThumbnailUtils.extractThumbnail(imageAfterCroped, maxWeight, maxHeight, OPTIONS_RECYCLE_INPUT);
這是我總結的集中簡單的處理圖片的方法,歡迎交流,轉載請註明出處。謝謝。