我有一个问题,我似乎找不到答案。 是这行代码:
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图像。通过解码这些文件并将它们加载到位图,如果我只需要(200 x 150)的缩略图,我是否需要有足够的内存来以全分辨率(2000 x 1500)下载文件?
答案 0 :(得分:2)
我知道另一个答案已被接受为正确答案,但为了清楚起见......
此行options.inJustDecodeBounds = true;
表示对BitmapFactory.decodeStream(is, null, options);
的调用不会获取位图信息,但会获取边界信息和MimeType。
然后,您可以使用这些返回的值outWidth
,outHeight
和outMimeType
通过设置options.inJustDecodeBounds = false;
并设置示例来获取位图数据的“重新采样”版本由给定的输出尺寸options. inSampleSize = [int]
确定的给定比率的大小。
有关详细信息,请参阅此信息丰富的页面:Loading Large Bitmaps Efficiently
答案 1 :(得分:0)
确实看起来正在下载文件,效率部分来自内存中加载的位图较小的位置(使用inSampleSize选项解码的位图)。