Android Bitmap优化,防止内存溢出

 一、引言

  • Drawable:通用的图形对象,用于装载常用格式的图像,既可以是PNG,JPG这样的图像, 也是前面学的那13种Drawable类型的可视化对象!我们可以理解成一个用来放画的——画框
  • Bitmap(位图):我们可以把他看作一个画架,我们先把画放到上面,然后我们可以 进行一些处理,比如获取图像文件信息,做旋转切割,放大缩小等操作!
  • Canvas(画布):如其名,画布,我们可以在上面作画(绘制),你既可以用Paint(画笔), 来画各种形状或者写字,又可以用Path(路径)来绘制多个点,然后连接成各种图形!
  • Matrix(矩阵):用于图形特效处理的,颜色矩阵(ColorMatrix),还有使用Matrix进行图像的 平移,缩放,旋转,倾斜等!

在Android中我们使用图像经常涉及到Bitmap,而Bitmap使用不当容易引发Out Of Memory(内存溢出),接下来我们就来谈及如何优化处理Bitmap,防止引发内存溢出问题

先来了解下Bitmap占用内存大小的计算公式为:图片宽度×图片高度×一个像素点所占字节数 ,所以减小这三个参数的任一值都可减小bitmap所占的内存大小

也可以通过调用Bitmap.getAllocationByteCount() 方法来查看Bitmap所占内存大小

二、减小内存占用

1.BitmapFactory.Options.inSampleSize

inSampleSize 是BitmapFactory.Options的一个属性,改变该配置即改变图片的宽高,如果设置为大于1的值(小于1的值即为1),则请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。

例如,inSampleSize = 4返回的图像为原始宽度/高度的1/4像素数目的1/16

该属性配合inJustDecodeBounds属性使用,如果设置为true,则解码器将返回null(无位图),但out...仍将设置字段,从而允许调用者查询位图而不必为其像素分配内存。

    private fun sampleCompress(requestWidth: Int, requestHeight: Int) {
        val options = BitmapFactory.Options()
        // 不分配内存空间,仅计算图片尺寸
        options.inJustDecodeBounds = true
        BitmapFactory.decodeResource(resources, R.mipmap.timg, options)
        Log.d(TAG, "bitmap
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值