Android BitmapFactory decodeStream()



我有一个问题,我似乎找不到答案。这几行代码是否:

final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(is, null, options);

实际上是指文件正在被下载?Android文档是这样说的:

decode with inJustDecodeBounds=true检查尺寸

:

options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);
    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    BitmapFactory.decodeStream(is, null, options);

意味着它实际上会下载更小的文件(不是以原始大小下载,然后复制到更小的位图)。

清晰的例子:我有一些url指向许多2000 x 1500的图像。通过解码这些文件并将它们加载到位图,如果我只需要(200 x 150)的缩略图,我是否需要足够的内存以完整分辨率(2000 x 1500)下载文件?

我知道另一个答案已经被认为是正确的,但为了清楚起见…

这行options.inJustDecodeBounds = true;意味着对BitmapFactory.decodeStream(is, null, options);的调用没有得到位图信息,但得到了边界信息和MimeType。

然后您可以使用这些返回值,outWidth, outHeightoutMimeType通过设置options.inJustDecodeBounds = false;并将样本大小设置为由所需输出维度options. inSampleSize = [int]确定的给定比率来获得位图数据的"重新采样"版本。

查看这个非常有用的页面了解更多信息:高效加载大位图

确实看起来文件正在被下载,并且效率部分来自于在内存中加载的位图是较小的(使用inSampleSize选项解码的位图)。

最新更新