有什么方法可以提高BitmapFactory.decodeStream()的速度?

时间:2012-01-10 15:01:11

标签: android

显然,这是一项昂贵/耗时的操作。有什么方法可以改善吗?

Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL(
                                            someUrl).getContent());

我猜测真的没有办法避免这种相对激烈的操作,但是想知道是否有人有任何可以推荐的调整(除了缓存实际的位图,无论出于何种原因,这里都没有相关性)< / p>

1 个答案:

答案 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);