如何有效地解码只知道其路径的图像

时间:2013-07-18 12:54:22

标签: android bitmap

我正在使用ViewPager创建自己的图库,ViewPager与ArrayList“连接”,保存要显示的图像路径。

到目前为止,我使用:

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

它正在工作,但是图片非常大,我不必要地解码整个图片,因为它后来按比例缩小以适应布局。当我快速滚动时,它很慢并且有时会发生OutOfMemoryError崩溃。

所以问题是: 我如何有效地解码图像,使其与ImageView.ScaleType.CENTER_INSIDE一致,只知道它的路径?

1 个答案:

答案 0 :(得分:3)

请勿直接解码。使用inJustDecodeBounds = true中的BitmapFactory.Options,仅从位图加载宽度和高度。然后,您可以计算inSampleSize以扩展Bitmap

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

decodeFile将返回null,选项将包含widthheight。然后计算inSampleSize和:

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