【问题标题】:Android BitmapFactory decodeStream()Android BitmapFactory decodeStream()
【发布时间】:2013-04-18 07:04:03
【问题描述】:

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

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

【问题讨论】:

  • 我认为您需要下载完整分辨率(2000 x 1500),除非服务器提供任何尺寸减小参数。

标签: android decode bitmapfactory sample-size


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多