2011-03-17 50 views
2

從我原來的question後續。ImageView Android內存

有沒有辦法在android應用程序中使用ImageViews而不使用大量RAM?

在原來的question我發現我的應用程序使用了大量的RAM,並且發現它是我用過的所有RAM的ImageViews。

以獲取圖像我用

public void addPictureOnClick(View view){ 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"),1); 
    } 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
      // currImageURI is the global variable I'm using to hold the content:// URI of the image 
      Uri currImageURI = data.getData();     
      image.setImageURI(currImageURI); 
     } 

我想知道是否有另一種方式來顯示圖片,而不是URI?

+0

有多大你加載圖像,有多少,以及什麼是內存使用,當你使用它們相比,當你不? – DMags 2011-03-17 14:59:08

+0

@DMags:我不知道大小。這是用手機拍攝的照片。 RAM的使用量是4Mb,沒有一張圖片,24Mb的圖片是 – Bastaix 2011-03-17 15:05:47

回答

3

可以縮放你的照片:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 2; 
imageViewFIeld.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length, options)); 

縮放過程可能會更長,如果你有大的圖像,但是內存的負荷將展出更低。

編輯:你增加inSampleSize值越多,需要的次數越多,內存使用量越少。

inSampleSize文檔:如果設置 到的值> 1,要求解碼器 子採樣原始圖像, 返回一個較小的圖像以節省 存儲器。樣本大小是 對應於解碼位圖中的單個像素的任意維度中的像素的數量 。例如, inSampleSize == 4返回的圖像是 ,它是原始圖像的寬度/高度的1/4,以及1/16像素的數量的1/16。任何值< = 1處理 一樣。注意:解碼器將嘗試 滿足這一要求,但 生成位圖可能有恰恰是已經被要求 不同 尺寸。另外,2的冪次爲 通常更快/容易讓解碼器以 的榮譽。

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

+0

另外一個關於SampleSize的問題是它應該是2的倍數,而12的樣本會給你一些圖像。我不認爲你會看到這個樣本大小爲2的任何東西。 – 2011-03-17 15:53:05

+0

推薦使用2的權力,但不是強制性的,如文檔中所述。「另外,2的權力往往更快/更容易解碼器履行。 「如果使用2作爲樣本大小,則將有一半大小的圖像:原始1024x768,比例2:512x384 – Hrk 2011-03-17 16:35:26

+1

使用decodeInbouds獲取圖像大小,然後動態調整inSampleSize,可以讓您以獲得圖像的最佳分辨率。 – smith324 2011-03-18 01:57:49