q:加載時圖檔時有一些圖檔太大,導緻記憶體溢出,想把這些圖檔壓縮成一個縮略圖,該怎麼做?
不能隻是縮小圖檔大小,而是要把體積降下來,幾百k的圖檔壓縮成幾k或幾百b.
a1:
壓縮圖檔品質:
bitmap.compress(bitmap.compressformat.jpeg, quality, fos);
其中的quality為0~100, 可以壓縮圖檔品質, 不過對于大圖必須對圖檔resize
這個是等比例縮放:
bitmap = bitmap.createscaledbitmap(bitmap, width, height, false);
newbitmap = bitmap.createbitmap(oldbitmap, 0, 0, width, height, matrix,
true);//用距陣的方式縮放
這個是截取圖檔某部分:
bitmap = bitmap.createbitmap(bitmap, x, y, width, height);
這幾個方法都是針對bitmap的, 不過鑒于bitmap可以從file中讀取, 也可以寫入file.
這是我知道android自帶庫裡中唯一可以縮放和壓縮的圖檔方法.
--------------------------------------------------------------------------------------------------------------------------------------------------
a2:
記憶體溢出,你這麼處理就可以。用完及時回收
bitmapfactory.options options = new bitmapfactory.options();
options.intempstorage = new byte[16*1024];
bitmap bitmapimage = bitmapfactory.decodefile(path,opt);
q:bitmap如何儲存成為一個bmp檔案:
a:很多網友可能發現了android的bitmap對象無法儲存成為一個bmp檔案,即提供的方法隻有compress(bitmap.compressformat format, int quality, outputstream stream) ,可以存為png和jpg,png可能還好說,但是jpg是有損壓縮會降低圖檔的品質,其實google還提供了一個api在bitmap類,通過copypixelstobuffer(buffer dst) 這個方法來解決,buffer類型,和前幾天我們說到的nio中的bytebuffer處理方式一樣,需要說明的是java中的buffer在記憶體中是連續成塊的,同時底層有c++支援效率還是很高的。
通過copypixelstobuffer(buffer dst) 方法将會傳回一個rgb8888格式的dib檔案,dib位圖和裝置無關,這裡android123提醒大家,如果想顯示出位圖,還需要将其加上位圖的檔案頭才行。
q:
一、 相關概念
1. drawable 就是一個可畫的
對象,其可能是一張位圖( bitmapdrawable ),也可能是一個 圖形(shapedrawable ),還有可能是一
個圖層( layerdrawable ),我們根據畫圖的需求,建立相應的可畫對象
2. canvas 畫布,繪制的目
的區域,用于繪圖
3. bitmap 位圖,用于圖的
處理
4. matrix 矩陣,此例中用
于操作圖檔
二、 步驟
1. 把 drawable 畫到位圖對象上
2. 對位圖對象做縮放(或旋轉等)操作
3. 把位圖再轉換成 drawable
三、 示例