android 查看圖片縮略圖
在android中,圖片使用上,往往會出現(xiàn)OOM(out of memory)的情況,在這里,我將總結(jié)一些辦法,來避免OOM的問題。
先看一張圖:
這張圖里,使用的gridView來顯示圖片,如果圖片數(shù)目很多,上下滾動的時候,很容易出現(xiàn)OOM的情況。
這里,每張圖片的實際像素是320*480.這里縮放后,每張圖片的大小是100*100.、
縮放代碼如下:
Options?options?=?new?BitmapFactory.Options();
????????????????????options.inJustDecodeBounds?=?true;
????????????????????BitmapFactory.decodeFile(imagePath,?options);
????????????????????int?scale?=?1;
????????????????????while?(true)?{
????????????????????????if?(options.outWidth?/?2?>=?width?&&?options.outHeight?/?2?>=?height)?{
????????????????????????????options.outWidth?/=?2;
????????????????????????????options.outHeight?/=?2;
????????????????????????????scale++;
????????????????????????}?else?{
????????????????????????????break;
????????????????????????}
????????????????????}
????????????????????Log.i(TAG,?"inSampleSize="?+?scale);
????????????????????options.inSampleSize?=?scale;
????????????????????options.inJustDecodeBounds?=?false;
???????????????????return?BitmapFactory.decodeFile(imagePath,?options);做點說明:
Options這個類,有兩個重要的屬性。分別是inJustDecodeBounds 和inSampleSize。
inJustDecodeBounds 表示是否只是解碼邊界信息,也就是,這段代碼
BitmapFactory.decodeFile(imagePath,?options);
之后,options里會存儲該圖片的高度和寬度信息,而此時返回的bitmap是為null的。
得到了圖片的高度和寬度之后,我們再看下一個屬性inSampleSize,這個屬性可以理解為縮放比例,是int類型,縮放比例為2的指數(shù)倍
比如說inSampleSize=1時,則表示不縮放,inSampleSize=2時,表示長和寬都分別縮小到原來的1/2*2,即四分之一,同理為3時則為九分之一。
最后縮放出來的大小,并不是能和要求的大小一模一樣,但是不會小于指定的長和寬,可以在LayoutParams里指定長和寬,即達到了圖上的效果。





