如何高效利用Bitmap

发布时间:2021-12-30 09:27:59 作者:iii
来源:亿速云 阅读:158

这篇文章主要介绍“如何高效利用Bitmap”,在日常操作中,相信很多人在如何高效利用Bitmap问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何高效利用Bitmap”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

背景:图片加载在项目中是随处可见,而图片加载在很多情况下需要用到Bitmap(位图)这个类。Bitmap可以说是一个“大胖子”,因为Bitmap自身会将图片每个像素的属性全部保存在内存中。这就会导致我们稍有不慎就会创建出一个占用内存很大的Bitmap对象,从而导致加载速度过慢,常见表现为OOM(Out of Memory)。 
有必要对Bitmap进行优化,从而降低出现Crash情况的概率,提高app的加载图片速度,增强APP稳定性。

1
应用场景

举个栗子

如何高效利用Bitmap

上面的代码经常在我们的项目中出现。你可知其背后的处理逻辑? 
根据源码可知,上面的代码中两个方法setBackgroundResource()setImageResource()是使用Bitmap作为过渡处理的。在运行时,上面的两个方法会使用BitmapFactory.decodeStream()方法将资源图片生成一个Bitmap,然后由这个Bitmap生成一个Drawable,最后再将这个Drawable设置到ImageView。

如果运用以上代码,在加载的图片的尺寸远大于ImageView的尺寸,你会发现控件加载图片非常缓慢。你使用在ListView或RecycleView中批量加载一些未知size的图片的时候,你会发现会出现卡顿的情况。

2
BitmapFactory

BitmapFactory是谷歌官方为我们开发者提供加载图片方式的类,它可以从文件、图片传输流、字节数组这三种方式中加载图片。

3
Options类介绍

要实现高效加载Bitmap,首先我们要了解Options类的几个参数,因为正是通过合理的配置这几个参数,我们才能够实现高效的加载Bitmap对象。Options类是BitmapFactory的一个静态内部类,我们来看一下它的源码:

如何高效利用Bitmap

几个名词解释下:

4
Bitmap优化

1.获取图片的原始宽高 
通过将Options的inJustDecodeBounds属性设为true后调用decodeResource方法,可以实现不真正加载图片而只是获取图片的尺寸信息

如何高效利用Bitmap

2、根据原始宽高计算出inSampleSize,代码如下:

如何高效利用Bitmap

3、根据计算出的inSampleSize生成Bitmap

如何高效利用Bitmap

4、调用以上的decodeSampledBitmapFromResource方法,使用自定尺寸的Bitmap。 如果你要将一张大图设置为一个250*250的缩略图,执行以下代码:

如何高效利用Bitmap

到此,关于“如何高效利用Bitmap”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Bitmap优化详谈
  2. BitMap实现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

bitmap

上一篇:在virtualbox中安装centos6.5并编译linux3.17.4内核出错怎么办

下一篇:SQL SERVER锁升级的investigation是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》