Android 高效加載大圖

1.讀取圖片信息(寬今缚、高秋秤、MimeType)

BitmapFactory.Options options = new BitmapFactory.Options();//options對象用來存放圖片的信息
options.inJustDecodeBounds = true;//true表示返回一個為null的Bitmap,這樣不占用內(nèi)存
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);//把圖片信息寫入options對象
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;

當(dāng)然以下靜態(tài)方法也是可以獲得options對象的

BitmapFactory.decodeFile(String pathName, Options opts);
BitmapFactory.decodeByteArray(byte[] data, int offset, int length, Options opts);
BitmapFactory.decodeStream(InputStream is, Rect outPadding, Options opts);

2.計算縮放大小

為了告訴解碼器去加載一個縮小版本的圖片到內(nèi)存中,需要在BitmapFactory.Options 中設(shè)置 inSampleSize 的值预明。例如, 一個分辨率為2048x1536的圖片役耕,如果設(shè)置 inSampleSize 為4采转,那么會產(chǎn)出一個大約512x384大小的Bitmap。加載這張縮小的圖片僅僅使用大概0.75MB的內(nèi)存瞬痘,如果是加載完整尺寸的圖片故慈,那么大概需要花費12MB(前提都是Bitmap的配置是 ARGB_8888)。下面有一段根據(jù)目標(biāo)圖片大小來計算Sample圖片大小的代碼示例:

public static int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) { 
// Raw height and width of image
 final int height = options.outHeight; 
 final int width = options.outWidth;
 int inSampleSize = 1; 
 if (height > reqHeight || width > reqWidth) {
      final int halfHeight = height / 2;
      final int halfWidth = width / 2;
    // Calculate the largest inSampleSize value that is a power of 2 and keeps both 
    // height and width larger than the requested height and width.
    while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) { 
      inSampleSize *= 2; 
    } 
} 
return inSampleSize;
}

為了使用該方法框全,首先需要設(shè)置 inJustDecodeBounds 為 true
, 把options的值傳遞過來察绷,然后設(shè)置inSampleSize 的值并設(shè)置 inJustDecodeBounds 為 false
,之后重新調(diào)用相關(guān)的解碼方法津辩。

3.解碼克婶,返回縮小的Bitmap

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { 
// 第一次設(shè)置 inJustDecodeBounds=true 只是計算尺寸
final BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(res, resId, options);
 // 計算 inSampleSize 
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false; 
return BitmapFactory.decodeResource(res, resId, options);
}

參考來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筒严,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子情萤,更是在濱河造成了極大的恐慌鸭蛙,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筋岛,死亡現(xiàn)場離奇詭異娶视,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)睁宰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門肪获,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柒傻,你說我怎么就攤上這事孝赫。” “怎么了红符?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵青柄,是天一觀的道長。 經(jīng)常有香客問我预侯,道長致开,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任萎馅,我火速辦了婚禮双戳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糜芳。我一直安慰自己飒货,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布峭竣。 她就那樣靜靜地躺著膏斤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邪驮。 梳的紋絲不亂的頭發(fā)上莫辨,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音毅访,去河邊找鬼沮榜。 笑死,一個胖子當(dāng)著我的面吹牛喻粹,可吹牛的內(nèi)容都是我干的蟆融。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼守呜,長吁一口氣:“原來是場噩夢啊……” “哼型酥!你這毒婦竟也來了山憨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤弥喉,失蹤者是張志新(化名)和其女友劉穎郁竟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體由境,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡棚亩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了虏杰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讥蟆。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纺阔,靈堂內(nèi)的尸體忽然破棺而出瘸彤,到底是詐尸還是另有隱情,我是刑警寧澤笛钝,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布质况,位于F島的核電站,受9級特大地震影響婆翔,放射性物質(zhì)發(fā)生泄漏拯杠。R本人自食惡果不足惜掏婶,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一啃奴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雄妥,春花似錦最蕾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枝秤,卻和暖如春醋拧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淀弹。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工丹壕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人薇溃。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓菌赖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沐序。 傳聞我的和親對象是個殘疾皇子琉用,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容