显然,这是一项昂贵/耗时的操作。有什么方法可以改善吗?
Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL(
someUrl).getContent());
我猜测真的没有办法避免这种相对激烈的操作,但是想知道是否有人有任何可以推荐的调整(除了缓存实际的位图,无论出于何种原因,这里都没有相关性)< / p>
答案 0 :(得分:6)
如果你不需要全分辨率,你可以让它只读取第n个像素,其中n是2的幂。你可以通过在Options对象上设置inSampleSize
来做到这一点传递给BitmapFactory.decodeFile
。您可以通过在inJustDecodeBounds
对象上设置Options
,在第一遍中读取文件中的元数据来查找样本大小。除此之外 - 不,我认为有一种简单的方法可以让它比现在更快。
编辑,示例:
Options opts = new Options();
// Get bitmap dimensions before reading...
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, opts);
int width = opts.outWidth;
int height = opts.outHeight;
int largerSide = Math.max(width, height);
opts.inJustDecodeBounds = false; // This time it's for real!
int sampleSize = ??; // Calculate your sampleSize here
opts.inSampleSize = sampleSize;
Bitmap bmp = BitmapFactory.decodeFile(path, opts);