Android BitmapFactory decodeStream()

时间:2013-04-18 07:04:04

标签: android decode bitmapfactory sample-size

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

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)下载文件?

2 个答案:

答案 0 :(得分:2)

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

此行options.inJustDecodeBounds = true;表示对BitmapFactory.decodeStream(is, null, options);的调用不会获取位图信息,但会获取边界信息和MimeType。

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

有关详细信息,请参阅此信息丰富的页面:Loading Large Bitmaps Efficiently

答案 1 :(得分:0)

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