2013-04-18 70 views
0

我有一個問題,我似乎找不到答案。 請問這個代碼行:Android BitmapFactory decodeStream()

final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 

    BitmapFactory.decodeStream(is, null, options); 

實際上意味着,該文件被下載? Android的文檔說是這樣的:

解碼與inJustDecodeBounds = true來檢查尺寸

請問:

options.inSampleSize = calculateInSampleSize(options, reqWidth, 
      reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    BitmapFactory.decodeStream(is, null, options); 

意味着,它實際上將下載文件更小( 未作爲原始大小下載並在此之後複製到較小尺寸的位圖)。

清除示例:我有一些指向許多2000 x 1500圖像的url。通過解碼這些文件並將它們加載到位圖中,如果我只需要(200 x 150)的縮略圖,是否需要有足夠的內存以全分辨率(2000 x 1500)下載文件?

+0

我認爲你需要下載的全分辨率(2000×1500),除非服務器提供任何尺寸減小的參數。 – Abx 2013-04-18 07:10:11

回答

0

確實看起來好像正在下載文件,效率部分來自內存中加載的位圖是較小的位置(使用inSampleSize選項解碼的位圖)。

2

我知道另一個答案已經被接受爲正確的,但爲了清楚起見......

此行options.inJustDecodeBounds = true;意味着調用BitmapFactory.decodeStream(is, null, options);沒有得到位圖信息,但獲取邊界信息和mime類型。

然後,您可以使用這些返回的值,outWidthoutHeightoutMimeType通過設置options.inJustDecodeBounds = false;和樣本大小設置爲你想要的輸出尺寸options. inSampleSize = [int]確定給定的比得到的位圖數據的「重新採樣」版本。

有關更多信息,請參見本非常豐富的頁面:Loading Large Bitmaps Efficiently