woaide

           

          Android圖片內存優化

          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;

          posted on 2012-06-25 18:52 roselj 閱讀(2436) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 自治县| 玉环县| 天长市| 文化| 吴忠市| 林州市| 左云县| 建宁县| 彰化县| 三门峡市| 科技| 化德县| 上栗县| 威海市| 通城县| 桓仁| 深泽县| 河津市| 滦平县| 南开区| 塔城市| 天津市| 禄丰县| 石狮市| 沙湾县| 资中县| 绥化市| 遵义市| 依兰县| 壤塘县| 奉贤区| 南华县| 肇州县| 光山县| 万全县| 浦东新区| 茶陵县| 娄底市| 扶风县| 玉门市| 邢台市|