Android手機開發之圖片記憶體最佳化幾點

來源:互聯網
上載者:User

1、將圖片轉化為縮圖再載入:

 代碼如下 
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inSampleSize = 2;
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);

該段代碼即是讀取1.png的縮圖,長度、寬度都只有原圖片的1/2。圖片大小減少,佔用的記憶體自然也變小了。這麼做的弊端是圖片品質變差,inSampleSize的值越大,圖片的品質就越差。由於各手機廠商縮放圖片的演算法不同,在不同手機上的縮放圖片品質可能會不同。筆者就遭遇過moto手機片縮放後品質可以接受,三星手機上同樣的縮放比例,品質卻差很多的情況。

2、用ARBG_4444顏色模式載入圖片:

Android中有四種,分別是:

ALPHA_8:每個像素佔用1byte記憶體

ARGB_4444:每個像素佔用2byte記憶體

ARGB_8888:每個像素佔用4byte記憶體

RGB_565:每個像素佔用2byte記憶體

Android預設的顏色模式為ARGB_8888,這個顏色模式色彩最細膩,顯示品質最高。但同樣的,佔用的記憶體也最大。

 代碼如下 
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inPreferredConfig = Bitmap.Config.ARGB_4444;   
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);

以上代碼即是將1.png以ARGB_4444模式讀出。記憶體減少雖然不如第一種方法明顯,但是對於大多數圖片,看不出與ARGB_8888模式有什麼差別。不過在讀取有漸層效果的圖片時,可能有顏色條出現。另外,會影響圖片的特效處理。

3、調用圖片的recycle()方法:

這個其實不是真正降低圖片記憶體的方法。主要目的是標記圖片對象,方便回收圖片對象的本機資料。圖片對象的本機資料佔用的記憶體最大,而且與程式Java部分的記憶體是分開計算的。所以經常出現Java heap足夠使用,而圖片發生OutOfMemoryError的情況。在圖片不使用時調用該方法,可以有效降低圖片本機資料的峰值,從而減少OutOfMemoryError的機率。不過調用了recycle()的圖片對象處於“廢棄”狀態,調用時會造成程式錯誤。所以在無法保證該圖片對象絕對不會被再次調用的情況下,不建議使用該方法。特別要注意已經用setImageBitmap(Bitmap img)方法分配給控制項的圖片對象,可能會被系統類別庫調用,造成程式錯誤。

4、使用Matrix物件放大顯示的圖片如何更改顏色模式:

雖然使用Matrix物件放大顯示圖片,必定會耗費更多的記憶體,但有時候也不得不這樣做。放大後的圖片使用的ARGB_8888顏色模式,就算原圖片是ARGB_4444顏色模式也一樣,而且沒有辦法在放大時直接指定顏色模式。可以採用以下辦法更改圖片顏色模式。

 代碼如下 
Matrix matrix = new Matrix();
float newWidth = 200;//圖片放大後的寬度
float newHeight = 300;//圖片放大後的長度
matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());
Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的圖片
img2 = img1.copy(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444顏色模式的圖片
img = null;
img1 = null;

這裡比起原來的圖片額外產生了一個圖片對象img1。但是系統會自動回收img1,所以實際記憶體還是減少了。

 

相關文章

聯繫我們

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