Android BitmapFactory用法總結
阿新 • • 發佈:2019-02-20
BitmapFactory的作用是:Creates Bitmap objects from various sources, including files, streams, and byte-arrays。常用方法如下:
decodeByteArray(byte[] data, int offset,int length):從指定位元組陣列的offset位置開始,將長度為length的位元組資料解析成Bitmap物件。 decodeFIle(String pathName):從pathName指定的檔案中解析、建立Bitmap物件。 decodeFileDescriptor(FileDescriptor fd):用於從FileDescriptor對應的檔案中解析、建立Bitmap物件。 decodeResource(Resource res,int id):用於根據給定的資源ID從指定的資原始檔中解析、建立Bitmap物件。 decodeStream(InputStream is):用於從指定輸入流中介解析、建立Bitmap物件。下面列舉幾個常用例項:
1、使用BitmapFactory實現對Base64格式資料的解碼
從網路上獲得的圖片資料為Base64編碼格式,使用BitmapFactory將其轉換成Bitmap物件,如下:
private Bitmap stringtoBitmap(String string){ Bitmap bitmap=null; try { byte[] bitmapArray; bitmapArray = Base64.decode(string, Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length); } catch (Exception e) { e.printStackTrace(); } return bitmap; }
2、在Activity中將資源圖片轉換成Bitmap物件
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.arrows_default);
關於OOM記憶體溢位問題:
使用BitmapFactory生成Bitmap物件時(特別是處理大圖片),常常碰到記憶體溢位問題。以下是幾點建議:
1、使用BitmapFactory.decodeStream方法建立bitmap物件,該方法從JNI>>nativeDecodeAsset()來完成decode,從而避免java層decode時的記憶體開銷。
2、利用BitmapFactory.Options的inSampleSize屬性設定,縮小圖片尺寸。
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inSampleSize = 4;
通過設定inSampleSize 的值,將圖片的長寬定義成原圖的1 / inSampleSize。
3、適時回收不再使用的bitmap物件,回收方法如下:
if(!bitmap.isRecycled()){
bitmap.recycle(); //回收圖片所佔的記憶體
System.gc(); //提醒系統及時回收
}