前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android基础-Bitmap加载

Android基础-Bitmap加载

作者头像
PhoenixZheng
发布2018-08-07 16:07:26
6270
发布2018-08-07 16:07:26
举报

Android开发中比较需要注意的是内存的消耗,而在平时开发中经常会遇到内存占用大的情况是对Bitmap的处理。 其中的基础之一是如何在保证不消耗过大内存的情况下加载一张大图。这也是面试中经常问的一道基础题。

Bitmap加载

通常来说在加载Bitmap的过程中导致OOM的原因是要加载的图片太大, 但因为现在屏幕的尺寸都不大,就算是一个高分辨率的图片,以小图加载也就足够了。 所以思路一般是,先获取当前要显示的ImageView区域大小,按大小缩放原图然后加载。

获取Bitmap大小

获取Bitmap大小的过程不需要加载整张图片,可以用 BitmapFactory.Options 来获取

代码语言:javascript
复制
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decode***
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;

其中 decode方法有很多种,可以根据需要选择不同的实现,比如 stream, file等, 重点是inJustDecodeBounds设置为 true 之后在解析的时候就不会加载到内存了,只获取对应的宽和高。

按缩放率加载图片

比方说要把一张 960960的图放到9696的ImageView里,很简单我们应该缩放10倍, 缩放的过程可以用 inSampleSize 这个参数来控制,

代码语言:javascript
复制
public Bitmap getResizedBitmap(File bitmap, int sampleSize) {
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = false;
  options.inSampleSize = sampleSize;
  return BitmapFactory.decodeFile(bitmap, options);
}

在真正加载图片的时候 inJustDecodeBounds这个参数需要设置为true, 此时将会真正的消耗内存。

上面这就是Android图片加载的入门技巧了,也是个必备技巧, 在各种初级面试中都会问到,希望能帮到大家。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Bitmap加载
    • 获取Bitmap大小
      • 按缩放率加载图片
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档