Android 按指定大小讀取圖片的實(shí)例
在Android開(kāi)發(fā)中,我們經(jīng)常遇到Android讀取圖片大小超過(guò)屏幕顯示的圖(一般只要顯示一定規(guī)格的預(yù)覽圖即可),在圖片特別多或者圖片顯示很頻繁的時(shí)候要特別注意這個(gè)問(wèn)題,下面介紹個(gè)按指定大小讀取圖像的方法。
實(shí)現(xiàn)原理:首先獲取圖片文件的圖像高和寬,如果小于指定比例,則直接讀取;如果超過(guò)比例則按指定比例壓縮讀取。
捕獲OutOfMemoryError時(shí)注意點(diǎn):后面返回的是null,不要馬上從別的地方再讀圖片,包括R文件中的,不然依然會(huì)拋出這個(gè)異常,一般在初始化的時(shí)候緩存默認(rèn)圖片,然后顯示緩存中的圖片。
/** 獲取圖像的寬高**/
public static int[] getImageWH(String path) { int[] wh = {-1, -1}; if (path == null) { return wh; } File file = new File(path); if (file.exists() && !file.isDirectory()) { try { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; InputStream is = new FileInputStream(path); BitmapFactory.decodeStream(is, null, options); wh[0] = options.outWidth; wh[1] = options.outHeight; } catch (Exception e) { Log.w(TAG, "getImageWH Exception.", e); } } return wh; } public static Bitmap createBitmapByScale(String path, int scale) { Bitmap bm = null; try { //獲取寬高 int[] wh = getImageWH(path); if (wh[0] == -1 || wh[1] == -1) { return null; } //讀取圖片 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = Math.max(wh[0]/scale, wh[1]/scale); InputStream is = new FileInputStream(path); bm = BitmapFactory.decodeStream(is, null, options); } catch (Exception e) { Log.w(TAG, "createBitmapByScale Exception.", e); } catch (OutOfMemoryError e) { Log.w(TAG, "createBitmapByScale OutOfMemoryError.", e); //TODO: out of memory deal.. } return bm; }
以上就是解決Android 讀取圖片大小顯示的問(wèn)題,有需要的朋友可以參考下。
相關(guān)文章
Android應(yīng)用啟動(dòng)白屏處理方案詳解
這篇文章主要為大家介紹了Android應(yīng)用啟動(dòng)白屏處理方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android中使用socket使底層和framework通信的實(shí)現(xiàn)方法
native和framework的通信是通過(guò)jni,但是這一般只是framework調(diào)用native,native如果有消息要怎樣通知上層 呢?android中GSP模塊提供一種解決思路,但是實(shí)現(xiàn)有些復(fù)雜,這里介紹一種使用socket通信的方法可以使native和framework自由通信,感興趣的朋友一起看看吧2016-11-11android實(shí)現(xiàn)密碼框右側(cè)顯示小眼睛
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)密碼框右側(cè)顯示小眼睛,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09Android指紋識(shí)別功能深入淺出分析到實(shí)戰(zhàn)(6.0以下系統(tǒng)解決方案)
指紋識(shí)別在現(xiàn)實(shí)應(yīng)用中已經(jīng)很多了,本篇文章主要介紹了Android指紋識(shí)別功能,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11Android仿微信滑動(dòng)彈出編輯、刪除菜單效果、增加下拉刷新功能
這篇文章主要介紹了Android仿微信滑動(dòng)彈出編輯、刪除菜單效果、增加下拉刷新功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01Android在OnCreate中獲取控件的寬度和高度的實(shí)現(xiàn)代碼
在Android中,有時(shí)需要對(duì)控件進(jìn)行測(cè)量,得到的控件寬度和高度可以用來(lái)做一些計(jì)算。在需要自適應(yīng)屏幕的情況下,這種計(jì)算就顯得特別重要2012-11-11Android Lottie實(shí)現(xiàn)中秋月餅變明月動(dòng)畫特效實(shí)例
Lottie是Airbnb開(kāi)源的一個(gè)支持 Android、iOS 以及 ReactNative,利用json文件的方式快速實(shí)現(xiàn)動(dòng)畫效果的庫(kù),下面這篇文章主要給大家介紹了關(guān)于Android Lottie實(shí)現(xiàn)中秋月餅變明月動(dòng)畫特效的相關(guān)資料,需要的朋友可以參考下2021-09-09Android入門教程之ListView的應(yīng)用示例
這篇文章主要介紹了Android入門教程之ListView的應(yīng)用,結(jié)合簡(jiǎn)單實(shí)例形式分析了Android中l(wèi)istview的簡(jiǎn)單創(chuàng)建與使用步驟,需要的朋友可以參考下2016-10-10Android自定義EditText實(shí)現(xiàn)登錄界面
這篇文章主要為大家詳細(xì)介紹了Android自定義EditText實(shí)現(xiàn)登錄界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12