正常的圖片縮放代碼如:android
ByteArrayOutputStream baos = new ByteArrayOutputStream();spa
arg1.compress(Bitmap.CompressFormat.JPEG, 100, baos);//arg1爲傳進來的原始bitmapcode
baos.toByteArray();orm
InputStream is = new ByteArrayInputStream(baos.toByteArray());圖片
//進行縮放it
BitmapFactory.Options newOpts = new BitmapFactory.Options();io
// 開始讀入圖片,此時把options.inJustDecodeBounds 設回true了map
newOpts.inJustDecodeBounds = true;bug
Bitmap bitmap = BitmapFactory.decodeStream(is,null,newOpts);// 此時返回bm爲空float
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
// 如今主流手機比較可能是800*480分辨率,因此高和寬咱們設置爲
float hh = 100f;// 這裏設置高度爲800f
float ww = 100f;// 這裏設置寬度爲480f
// 縮放比。因爲是固定比例縮放,只用高或者寬其中一個數據進行計算便可
int be = 1;// be=1表示不縮放
if (w > h && w > ww) {// 若是寬度大的話根據寬度固定大小縮放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {// 若是高度高的話根據寬度固定大小縮放
be = (int) (newOpts.outHeight / hh);
}
if (be <= 0)
be = 1;
newOpts.inSampleSize = 2;// 設置縮放比例
// 從新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了
bitmap = BitmapFactory.decodeStream(is, null, newOpts);
最後取得bitmap居然爲空,百思不得起解,而後將bitmap獲取方式改成BitmapFactory.decodeByteArray(baos.toByteArray(), 0, baos.toByteArray().length, newOpts)就能獲取到了,這個真難道是android的一個bug?