首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android BitmapFactory decodeStream()

Android BitmapFactory decodeStream()
EN

Stack Overflow用户
提问于 2013-04-18 07:04:03
回答 2查看 5.1K关注 0票数 0

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

代码语言:javascript
复制
final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

    BitmapFactory.decodeStream(is, null, options);

实际上是说,那个文件是被下载的?Android文档会说这样的话:

用inJustDecodeBounds=true解码以检查尺寸

确实这样做:

代码语言:javascript
复制
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)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-29 08:23:03

实际上,该文件看起来正在被下载,而在内存中加载位图的是较小的位图(使用inSampleSize选项解码的位图)。

票数 0
EN

Stack Overflow用户

发布于 2013-09-16 14:04:06

我知道另一个答案已经被认为是正确的,但是为了清楚.

这一行options.inJustDecodeBounds = true;意味着对BitmapFactory.decodeStream(is, null, options);的调用不会得到位图信息,而是会得到边界信息和MimeType。

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

有关更多信息,请参见这个信息非常丰富的页面:高效加载大型位图

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16076524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档