我有一个问题,我似乎找不到答案。这几行代码是否:
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
, outHeight
和outMimeType
通过设置options.inJustDecodeBounds = false;
并将样本大小设置为由所需输出维度options. inSampleSize = [int]
确定的给定比率来获得位图数据的"重新采样"版本。
查看这个非常有用的页面了解更多信息:高效加载大位图
确实看起来文件正在被下载,并且效率部分来自于在内存中加载的位图是较小的(使用inSampleSize选项解码的位图)。