1. 程式人生 > >Android BitmapFactory用法總結

Android BitmapFactory用法總結

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(); //提醒系統及時回收
        }