2013-07-18 42 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

相关问题