我有一个问题,似乎找不到答案。这一行代码:
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)?
发布于 2013-04-29 08:23:03
实际上,该文件看起来正在被下载,而在内存中加载位图的是较小的位图(使用inSampleSize选项解码的位图)。
发布于 2013-09-16 14:04:06
我知道另一个答案已经被认为是正确的,但是为了清楚.
这一行options.inJustDecodeBounds = true;意味着对BitmapFactory.decodeStream(is, null, options);的调用不会得到位图信息,而是会得到边界信息和MimeType。
然后,您可以使用这些返回的值outWidth、outHeight和outMimeType来获得位图数据的“重放”版本,方法是设置options.inJustDecodeBounds = false;并将样本大小设置为由所需输出维度options. inSampleSize = [int]确定的给定比率。
有关更多信息,请参见这个信息非常丰富的页面:高效加载大型位图
https://stackoverflow.com/questions/16076524
复制相似问题