Bitmap圖片太大,會造成記憶體溢出。一般的都有圖片預覽機制,就是得到一張尺寸小一點的圖片。
這裡所謂的縮小尺寸可不是指在layout中設定一下寬高使圖片縮小(其實質還是一張占記憶體大圖),而是實實在在的將圖片本身縮小,減小記憶體佔用。
以下是方法,詳細說明都在注釋裡了:
[java]
private Bitmap revitionImageSize(String path, int size) throws IOException {
// 取得圖片
InputStream temp = this.getAssets().open(path);
BitmapFactory.Options options = new BitmapFactory.Options();
// 這個參數代表,不為bitmap分配記憶體空間,只記錄一些該圖片的資訊(例片大小),說白了就是為了記憶體最佳化
options.inJustDecodeBounds = true;
// 通過建立圖片的方式,取得options的內容(這裡就是利用了java的地址傳遞來賦值)
BitmapFactory.decodeStream(temp, null, options);
// 關閉流
temp.close();
// 產生壓縮的圖片
int i = 0;
Bitmap bitmap = null;
while (true) {
// 這一步是根據要設定的大小,使寬和高都能滿足
if ((options.outWidth >> i <= size)
&& (options.outHeight >> i <= size)) {
// 重新取得流,注意:這裡一定要再次載入,不能二次使用之前的流!
temp = this.getAssets().open(path);
// 這個參數表示 新產生的圖片為原始圖片的幾分之一。
options.inSampleSize = (int) Math.pow(2.0D, i);
// 這裡之前設定為了true,所以要改為false,否則就建立不出圖片
options.inJustDecodeBounds = false; www.2cto.com
bitmap = BitmapFactory.decodeStream(temp, null, options);
break;
}
i += 1;
}
return bitmap;
:
作者:xyz_fly