zgq105 / blog

2 stars 0 forks source link

Android Bitmap使用总结 #67

Open zgq105 opened 5 years ago

zgq105 commented 5 years ago

image

1. 什么是Bitmap?

Bitmap是位图的意思,又称栅格图或点阵图,是使用像素阵列来表示的图像。像素是位图最小信息单元,存储在图像栅格中。位图图像质量是由单位长度内像素的多少来决定的。单位长度内像素越多,分辨率越高,图像的效果越好。一般描述宽x高。

2. 如何计算Bitmap所占内存大小

像素点的色彩一般用ARGB,其中A表示透明度、R表示红色、G表示绿色、B表示蓝色。查看Bitmap中源码可知,Bitmap.Config是一个枚举类,主要分为以下几种类型:

说明:位数越高,可存储的颜色信息越多,图像也就越逼真。1字节=8位,即1byte=8bit。 因此,一张图片(BitMap)占用的内存=图片宽度×图片长度×单位像素占用的字节数。以一张宽40px,高30px、位图配置为ARGB_4444的图片为例;所以得到40x30x2=2400字节。

3. 图片压缩

3.1 有损压缩

指在压缩文件大小的过程中,损失了一部分图片的信息,也即降低了图片的质量,并且这种损失是不可逆的,我们不可能从有一个有损压缩过的图片中恢复出全来的图片。常见的有损压缩手段,是按照一定的算法将临近的像素点进行合并。

3.2 无损压缩

只在压缩文件大小的过程中,图片的质量没有任何损耗。我们任何时候都可以从无损压缩过的图片中恢复出原来的信息。 谷歌开源图片压缩算法:https://github.com/google/guetzli

4. 如何避免Bitmap造成OOM

5. 小结

位图Bitmap是我们开发中使用非常多的,同时也是比较容易造成内存问题的,因此,使用的过程中需要考虑优化和防止内存问题。当然平时开发也可以使用一些开源的框架来管理图片,像glide、picasso等。