Android的图片缓存处理

Android的bitmap

Bitmap:称为位图文件,扩展名可以是.bmp或者.dib。

Bitmap图片定义为由像素点组成,每个像素点可以由多种色彩表示

下面是四种色彩格式

 

ARGB_8888:ARGB分别代表的是透明度,红色,绿色,蓝色,每个值分别 用8bit来记录,也就是一个像素会占用4byte,共32bit.

ARGB_4444:ARGB的是每个值分别用4bit来记录,一个像素会占用 2byte,共16bit.

RGB_565:R=5bit,G=6bit,B=5bit,不存在透明度,每个像素会占用2byte, 共16bit.

ALPHA_8:该像素只保存透明度,会占用1byte,共8bit.

在实际应用中而言,建议使用ARGB_8888以及RGB_565。 如果你不需要透明度,选择RGB_565,可以减少一半的内存占用.

 

 

一张图片占据多大内存呢,举个例子:我的手机为例

我手机是1920*1080的分辨率,使用默认的ARGB_8888,那么大小是:

1920*1080*(32/8)/1024/1024 = 7.91M

由此可见,对于图片处理的重要性

 

加下来就说说图片处理

以我的电子签名为例子

首先我签名后会生成一张bitmap,然后我通过本地存储,将图片进行处理后保存

源码:compress(Bitmap.CompressFormat format, int quality, OutputStream stream)

第一个参数转化为什么格式,比如png,第二个参数图片质量,质量越高则图片还原到原图越接近,同时占用内存越大,最大可百分比还原,第三个是流,选择什么类型的流写入到文件里面去

这里就是一种形式,图片处理,当然这个是最基础的

通过循环压缩,当满足我们的需求大小的时候才跳出循环

图片的三级缓存机制

首先我们需要一张图片,这个时候我们有很多途径去获得,直接网络请求一张,或者从本地拿,那么怎样使最快的呢,这就涉及到图片的缓存机制了,这个机制并非是处理内存占据大小的,而是优化用户体验,节省流量的

  1. 从缓存中直接去拿:当前缓存已经存在了,直接去拿相当于是已经预加载状态,快速不需要流量
  2. 从本地缓存目录获取,这个时候需要去读取本地文件,需要权限,耗时也很短,比第一种稍长,不需要流量,拿到之后再将图片加入到缓存中去
  3. 第三种是缓存和本地缓存目录都没有的情况下,就只能去网络获取了,这种耗时长且损耗流量,当然第一次还是需要这个操作的,拿到之后将图片加入到缓存和本地缓存目录,为下一次加载提供数据

这里我就分享一些基础性的,更深层次的我还没理解到位,就不给大家分享了

给大家分享一波学习链接,郭神的bitmap解析

https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650243893&idx=1&sn=63fe28bbd9204b5f808708e14e57e1e8&chksm=8863725abf14fb4cf0cb60074e3224c3ea4852b44948d48f8ea0e45ccf21f0cf595459ec6b36&mpshare=1&scene=1&srcid=09057IcDQK6dPg6Od2rNmnXA#rd

猜你喜欢

转载自blog.csdn.net/lovelixue/article/details/82414937