2013-07-18 69 views
0

我正在創建我自己的畫廊使用ViewPager,這是'連接'到ArrayList控股路徑的圖像顯示。如何有效解碼圖像只知道它的路徑

到目前爲止,我用:

Bitmap bitmap = BitmapFactory.decodeFile(path); 
imageView.setImageBitmap(bitmap); 
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

它的工作,但是這些照片是非常大的,我不必要的解碼全貌,因爲它後來縮小規模佈局。速度很慢,並且有時會出現與OutOfMemoryError的崩潰,當我快速滾動時。

所以問題是: 我如何有效地解碼圖像,使其與ImageView.ScaleType.CENTER_INSIDE只能知道其路徑100%?

回答

3

不要直接對它進行解碼。從BitmapFactory.Options使用inJustDecodeBounds = true,只從位圖加載寬度和高度。然後,你可以calcuate的inSampleSize規模的Bitmap

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeFile(path, options); 

decodeFile將返回空值和選項會包含widthheight。然後你計算出inSampleSize和:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = false; 
options.inSampleSize = myInsampleSize; 
Bitmap output = BitmapFactory.decodeFile(path, options); 
+0

謝謝你的回答,它的效果很好。雖然我有一個問題:我怎樣才能解碼具有特定的大小,如50x50? – Mariusz

+0

結合使用'inSampleSize'和'Bitmap.createScaledBitmap()' – Blackbelt

相關問題