BitMap二次取樣程式碼
阿新 • • 發佈:2018-12-04
/**
* @param filePath 要載入的圖片路徑
* @param destWidth 顯示圖片的控制元件寬度
* @param destHeight 顯示圖片的控制元件的高度
* @return
*/
public static Bitmap getBitmap(String filePath, int destWidth, int destHeight) {
//第一次取樣
BitmapFactory.Options options = new BitmapFactory.Options ();
//該屬性設定為true只會載入圖片的邊框進來,並不會載入圖片具體的畫素點
options.inJustDecodeBounds = true;
//第一次載入圖片,這時只會載入圖片的邊框進來,並不會載入圖片中的畫素點
BitmapFactory.decodeFile(filePath, options);
//獲得原圖的寬和高
int outWidth = options.outWidth;
int outHeight = options.outHeight;
//定義縮放比例
int sampleSize = 1;
while (outHeight / sampleSize > destHeight || outWidth / sampleSize > destWidth) {
//如果寬高的任意一方的縮放比例沒有達到要求,都繼續增大縮放比例
//sampleSize應該為2的n次冪,如果給sampleSize設定的數字不是2的n次冪,那麼系統會就近取值
sampleSize *= 2;
}
/********************************************************************************************/
//至此,第一次取樣已經結束,我們已經成功的計算出了sampleSize的大小
/********************************************************************************************/
//二次取樣開始
//二次取樣時我需要將圖片加載出來顯示,不能只加載圖片的框架,因此inJustDecodeBounds屬性要設定為false
options.inJustDecodeBounds = false;
//設定縮放比例
options.inSampleSize = sampleSize;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
//載入圖片並返回
return BitmapFactory.decodeFile(filePath, options);
}
---------------------
作者:_江南一點雨
來源:CSDN
原文:https://blog.csdn.net/u012702547/article/details/51245133