圖片的處理也經常是影響著壹個程序的高效性和健壯性。
為什麽不直接用Bitmap傳輸?
位圖文件雖好,但是非壓縮格式,占用較大存儲空間。
Bitmap主要方法有:獲取圖像寬高、釋放,判斷是否已釋放和是否可修改,壓縮、創建制定位圖等功能
用於從不同的數據源(如文件、輸入流、資源文件、字節數組、文件描述符等)解析、創建Bitmap對象
允許我們定義圖片以何種方式如何讀到內存。
推薦閱讀: Android - Bitmap-內存分析
註意事項:
decodeFileDescriptor比decodeFile高效
查看源碼可以知道
替換成
建議采用decodeStream代替decodeResource。
因為BitmapFactory.decodeResource 加載的圖片可能會經過縮放,該縮放目前是放在 java 層做的,效率比較低,而且需要消耗 java 層的內存。因此,如果大量使用該接口加載圖片,容易導致OOM錯誤,BitmapFactory.decodeStream 不會對所加載的圖片進行縮放,相比之下占用內存少,效率更高。
這兩個接口各有用處,如果對性能要求較高,則應該使用 decodeStream;如果對性能要求不高,且需要 Android 自帶的圖片自適應縮放功能,則可以使用 decodeResource。
推薦閱讀:[ BitmapFactory.decodeResource加載圖片縮小的原因及解決方法
canvas和Matrix可對Bitmap進行旋轉、放縮、平移、切錯等操作
可以用Bitmap.onCreateBitmap、Canvas的clipRect和clipPath等等方式
推薦閱讀: android自定義View學習4--圖像剪切與變換
對初始化Bitmap對象過程中可能發生的OutOfMemory異常進行了捕獲。如果發生了OutOfMemory異常,應用不會崩潰,而是得到了壹個默認的Bitmap圖。
如果不進行緩存,盡管看到的是同壹張圖片文件,但是使用BitmapFactory類的方法來實例化出來的Bitmap,是不同的Bitmap對象。緩存可以避免新建多個Bitmap對象,避免內存的浪費。
如果圖片像素過大,使用BitmapFactory類的方法實例化Bitmap的過程中,需要大於8M的內存空間,就必定會發生OutOfMemory異常。
可以將圖片縮小,以減少載入圖片過程中的內存的使用,避免異常發生。
推薦閱讀:
Bitmap詳解與Bitmap的內存優化