Bitmap压缩,大图加载防止OOM异常闪退

文章目录

前言

Android官网中处理位图 和 高效加载大型位图
这两篇文章中已经做了很明确指出了如何高效的加载大图。这篇文章只是对其中的内容进行总结和扩展(比如图片内存计算、图片压缩等)。

为了防止加载 Bitmap 的时候造成 OOM 崩溃,我们首选要知道:

  • 一张图片加载到 Bitmap 的时候的占用的是怎么内存计算;
  • 占用内存过高的时候怎么进行图片压缩减小内存占用;

RGB介绍

RGB颜色模型: 最常见的颜色模型,设备相关。R、G、B分别代表红、绿和蓝色三种颜色通道,取值均为[0,255]。

RGB 8位色: 表示使用8位(bit)表示颜色,一共能表示2^8 = 128种颜色。
依次类推RGB 16位色,RGB 24位色,RGB 32位色,使用的位数越多,能表示的颜色越多,24位能表示的颜色数量已经很多了,称之为“真彩色”。

32位和24位能表示的颜色一样多,多一个了透明度。

Android Bitmap使用的三种颜色格式:

  • ALPHA_8–每个像素占1个字节,存储透明度信息,没有颜色信息。
  • RGB_565–每个像素占2个字节存储颜色信息,R 5位,G 6位,B 5位,能表示2^16种颜色。
  • ARGB_8888–每个像素占4个字节存储颜色信息,A R G B各一个字节,能表示2^24种颜色,还有一个字节存储透明度信息。

图片占用内存的计算

Bitmap 所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用的字节数。

读取位图尺寸和类型

BitmapFactory 类提供了几种用于从各种来源创建 Bitmap 的解码方法(decodeByteArray()、decodeFile()、decodeResource()等)。根据您的图片数据源选择最合适的解码方法。这些方法尝试为构造的位图分配内存,因此很容易导致 OutOfMemory 异常。每种类型的解码方法都有额外的签名,允许您通过 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值