Android編程之Bitmap圖片壓縮大小

來源:互聯網
上載者:User

Bitmap圖片太大,會造成記憶體溢出。一般的都有圖片預覽機制,就是得到一張尺寸小一點的圖片。

這裡所謂的縮小尺寸可不是指在layout中設定一下寬高使圖片縮小(其實質還是一張占記憶體大圖),而是實實在在的將圖片本身縮小,減小記憶體佔用。

以下是方法,詳細說明都在注釋裡了:
[java] 
private Bitmap revitionImageSize(String path, int size) throws IOException { 
        // 取得圖片 
        InputStream temp = this.getAssets().open(path); 
        BitmapFactory.Options options = new BitmapFactory.Options(); 
        // 這個參數代表,不為bitmap分配記憶體空間,只記錄一些該圖片的資訊(例片大小),說白了就是為了記憶體最佳化 
        options.inJustDecodeBounds = true; 
        // 通過建立圖片的方式,取得options的內容(這裡就是利用了java的地址傳遞來賦值) 
        BitmapFactory.decodeStream(temp, null, options); 
        // 關閉流 
        temp.close(); 
 
        // 產生壓縮的圖片 
        int i = 0; 
        Bitmap bitmap = null; 
        while (true) { 
            // 這一步是根據要設定的大小,使寬和高都能滿足 
            if ((options.outWidth >> i <= size) 
                    && (options.outHeight >> i <= size)) { 
                // 重新取得流,注意:這裡一定要再次載入,不能二次使用之前的流! 
                temp = this.getAssets().open(path); 
                // 這個參數表示 新產生的圖片為原始圖片的幾分之一。 
                options.inSampleSize = (int) Math.pow(2.0D, i); 
                // 這裡之前設定為了true,所以要改為false,否則就建立不出圖片 
                options.inJustDecodeBounds = false; www.2cto.com
 
                bitmap = BitmapFactory.decodeStream(temp, null, options); 
                break; 
            } 
            i += 1; 
        } 
        return bitmap; 




作者:xyz_fly

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.