Android 按指定大小讀取圖片的執行個體_Android

來源:互聯網
上載者:User

在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 讀取圖片大小顯示的問題,有需要的朋友可以參考下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.