0

我有一个问题,我似乎无处可寻。这行代码是否:

final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

    BitmapFactory.decodeStream(is, null, options);

实际上意味着,正在下载该文件?Android 文档是这样说的:

使用 inJustDecodeBounds=true 解码以检查尺寸

并且

options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);

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

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

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

4

2 回答 2

2

我知道另一个答案已经被接受为正确的答案,但为了清楚起见......

这一行options.inJustDecodeBounds = true;意味着调用BitmapFactory.decodeStream(is, null, options);不会获得位图信息,但会获得边界信息和 MimeType。

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

有关更多信息,请参阅此信息丰富的页面:有效加载大型位图

于 2013-09-16T14:04:06.567 回答
0

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

于 2013-04-29T08:23:03.503 回答