1.图片
首先,我们要知道手机上的图片,是以位图的形式展示的,是由一个个像素点组成的。
1.1 位图
位图,也称Bitmap。是不是觉得很熟悉,毕竟Bitmap我们处理图片的时候经常用到的一个类。
位图通常会占用我们的内存,占用的太多,就会出现我们常提到的OOM现象。
我们要解决这个问题,最常见最有效的解决方案:让内存的占用率变得更低。
实行这个方案之前,我们得明白:
- 位图大小怎么计算?
1.2 像素
像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。
我们提到的位图的长和宽,就是以像素(px)为单位。
而位图的大小=长 x 宽 x 位深 =xxx bit=yyy byte
位深,是指每个像素需要记录颜色的比特位数。(一个字节=8比特)
以下是图片的压缩格式:
其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。
ARGB_8888
表示32位ARGB位图,即A=8,R=8,G=8,B=8,一个像素点占8+8+8+8=32位,4个字节
RGB_565
表示16位RGB位图,即R=5,G=6,B=5,它没有透明度,一个像素点占5+6+5=16位,2个字节
所以,知道了这些,我们可以简单的想到两种方案:
- 等比例缩短 长和宽
- 减少 位深
但首先我们要明白,这两种方案都有可能造成图片的变样,所以我们要分析利弊。
这里,我们不用理会dp,反正dp,px最终都会以px为单位去计算。
第一种方案:
手机,需要显示一张 长800px,宽400px的图片,而网络下载的是一张长1600px,宽800px的图片,如果拿网络下载的这张图片去加载内存,无疑是一种浪费,使内存更加紧张。
这种情况,我们就可以对图片进行压缩,等比例缩短长和宽。
第二种方案:
记录颜色的位数减少,一般都会造成颜色的偏差,一般不建议这样做。