目录
像素大小:inPreferredconfig(ARGB_8888和RGB_565)
Bitmap到底如何优化?
在介绍之前,我们先要了解我们的图片是怎么构成的。
来,我们来看一下。
一张图片它有多大是怎么计算的?
大家可以看到我们这张图片是由一个一个这样的小方块组成的。
实际上这个小方块就是我们平时所说的像素,那么平时我们看照片的时候。
看不到这样的小方块,是因为我们的这个像素非常的小,所以说我们一般称它为像素点,
那我们的一张图片它有多大是怎么计算的? 大家想一下是怎么计算的?
其实我们的图片有多大,是每一个像素它所占用的大小再乘以这张图片总的像素个数。
这样的话就计算出来了我们的大小。比方说计算出来后就是 1kb、2kb或者是十兆、二十兆等等一些。
那具体怎么计算?
我们打个比方,假设我们的这一个像素点,一个像素点占用两个字节,我们这张图片假设是一千个像素。
那么整个这张图片它的大小是不是就是两千个字节啊,也就是 2kb 对不对?
也是 2kb ,那既然我们知道了我们一张图片,它的这个大小是这么计算的。
怎么去优化一张图片的大小
那么我们这一张图片想要优化它的大小的话,我们要怎么去优化,有什么思路没有。
实际上我们想要优化这一张图片的话,是不是可以从两个方面优化?
第一个就是从我们每一个像素它占用的大小去进行优化,对不对?比方说假设我的一个像素。
假设我们的像素,从一个像素占用两个字节,变成了一个像素占用一个字节。那么整个这个大小是不是就变成了 1kb,对不对?
还有一个角度是从什么呢?
就是从我们的像素的个数,假设它一个像素还是占用两个字节,而像素的个数由一千变成了五百。
那么是不是我们的这一个图片的大小也变成了 1kb,对不对?好的,那我们就从这两个方面去进行一个图片的优化。
我们可以看到,实际上安卓给我们提供的,这样的参数进行优化。这个参数就是我们的 BitmapFactory.options 里面的这两个参数。我们的 inPreferredConfig 这一个参数,就是用来设置我们的像素格式的,也就是每一个像素占用多少,占用多少个字节。
而 inSampleSize 它就是来把我们的一个图片,它的这一个像素总的个数,通过采样率去减少它的这一个个数来。
像素大小:inPreferredconfig(ARGB_8888和RGB_565)
我们首先来看一下 inPreferredConfig 这一个是如何的?
这个地方的话,举了两个例子,一个是我们的这个ARGB_8888,还有一个是 RGB_565。
那么 ARGB_8888 它是什么意思呢?
ARGB_8888 实际上它的 ARGB 是什么意思?
我们首先要清楚这一个,A指的就是我们的透明度,R指的是红色,G指的是绿色,B指的是蓝色。
那么 8888 是指什么意思呢?
它指的是:A透明度它要占用八个字节。这个 R 要占用八个字节,G 要占用八个字节,B 要占用八个字节。
那么这样组成一个像素的话,是不是就是四个 8 相加也就是三十二个字节。那么也就是占用 4 位。
所以说如果你的一张图片使用的是 ARGB_8888 这样的格式去组成的话,每一个像素它就占用四个字节。
而如果使用的是 RGB_565。五加六加五也就是 16 位,也就是 2 个字节。
所以说如果一张图片它原来只用的是 ARGB_8888,我把它改成 RGB_565 的话,是不是我的图片的这一个单元的大小就变为了原来的二分之一,是不是?所以说这就是我们的一种优化方式。
像素个数:inSampleSize
还有一种就是 inSampleSize,我们的一张图片刚才已经举例了,假如是一千个像素点,我把它变成五个,是不是就我的这一个图片就变小了。
所以说这个地方我们通过设置 inSampleSize 值,那么设置值它是一个整数值。
比方说我们设置成 2 的话,那这张图片它不是原来的二分之一,它的大小变成了原图片的四分之一,它怎么变的?
因为我们设置成 2 后,它的宽高就会变为原来的二分之一。来,画一下。
假设我们的图片本来有这么大,大家看到长宽分别为原来的二分之一,
那么这个时候实际上我们的图片变为了原来的四分之一,占用的内存大小也是原来的四分之一了。
我们这一个 inSampleSize 它的值的设置,要注意一点,就是它必须是 2 的幂,也就是2、4、8 这样的值不能是3、5等等一些