在Android開發中,我們經常遇到Android讀取圖片大小超過螢幕顯示的圖(一般只要顯示一定規格的預覽圖即可),在圖片特別多或者圖片顯示很頻繁的時候要特別注意這個問題,下面介紹個按指定大小讀取映像的方法。
實現原理:首先擷取圖片檔案的映像高和寬,如果小於指定比例,則直接讀取;如果超過比例則按指定比例壓縮讀取。
捕獲OutOfMemoryError時注意點:後面返回的是null,不要馬上從別的地方再讀圖片,包括R檔案中的,不然依然會拋出這個異常,一般在初始化的時候緩衝預設圖片,然後顯示緩衝中的圖片。
/** 擷取映像的寬高**/
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 讀取圖片大小顯示的問題,有需要的朋友可以參考下。