通过设置不同的inPreferredConfig值真的能减少Bitmap加载时占用的内存么?

我相信大部分Android开发都知道在解析Bitmap到内存的时候都知道,需要设置inPreferredConfig来减少Bitmap占用的内存,那么配置inPreferredConfig这个属性真的能减少Bitmap占用的内存么?其实并不然,这个就是我们今天要讨论的东西。
大家都知道,Android中Bitmap占用的内存大小与两个因素相关:
1.Bitmap的宽高(和图片的像素,图片放置的位置,手机的内置的dpi相关)。
2.Bitmap.Config的设置(ALPHA_8,RGB_565,RGB_4444,RGB_8888)。
上述四个值的含义如下:
ALPHA_8:每个像素点仅表示alpha的值,它不会存储任何颜色信息,占8位。
RGB_565:每个像素用5位R/6位G/5位G来表示,占16位。
ARGB_8888:每个像素分别用8位存储ARGB,占32位
ARGB_4444:和8888类似,只不过对于每个通道是使用4位表示,占16位,因此它的图片质量比较低,已经不推荐使用了。

实验是检验真理的唯一标准,我们直接动手吧。

1.先拿一张png图片做测试

代码如下:

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ALPHA_8;
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher,options);
        Log.v("MainActivity","width:"+bitmap.getWidth()+"height:"+bitmap.getHeight()+"size:"+bitmap.getByteCount());

       
        BitmapFactory.Options options1 = new BitmapFactory.Options();
        options1.inPreferredConfig = Bitmap.Config.RGB_565;
        Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher,options1);
        Log.v("MainActivity","width:"+bitmap1.getWidth()+"height:"+bitmap1.getHeight()+"size:"+bitmap1.getByteCount());

     
        BitmapFactory.Options options2 = new BitmapFactory.Options();
        options2.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher,options2);
        Log.v("MainActivity","width:"+bitmap2.getWidth()+"height:"+bitmap2.getHeight()+"size:"+bitmap2.getByteCount());

这里我们不拿RGG_4444举例了,因为已经基本不用了,且设置它和设置RBG_565的内存占用是一样的。
打印输入如下:
在这里插入图片描述
我们可以发现,当我们需要解析的图片是png时,不管我们将inPreferredConfig属性值设置成什么
并不能改变我们Bitmap占用的内存。

2.拿一张JPG(24位,32位)图片做测试

下面我们将这张图片通过Photoshop将png图片转成jpg24位图片,同样使用上述代码,运行程序。
输出如下:
在这里插入图片描述
可以看到当我们图片是jpg的时候,将inPreferredConfig设置成RGB_565的时候,Bitmap的所占内存比设置成RGB_8888减少了一般的内存占用。但是设置ALPHA_8时,并没有减少内存的占用。

3.拿一张JPG(8位)图片做测试

在这里插入图片描述
我们把图片去除颜色信息变成黑白的图片的时候,当我们把inPreferredConfig设置成ALPHA_8,比设置成RGB_8888减少四分之三的内存,当把inPreferredConfig设置成RGB_565时,比设置成RGB_8888一半的内存。

总结:
可以看到,并不是每次通过设置inPreferredConfig都能减少我们Bitmap所占的内存。
当我们图片是png的时候,我们设置成什么都没用,当我们图片是jpg8位,24位,32位时,我们通过设置inPreferredConfig位RGB_565时,可以减少一半的内存占用。当我们解析的图片是jpg8位时,通过设置inPreferredConfig位ALPHA_8时可以减少四分之三的内存占用。
当我们不指定inPreferredConfig的值时,我们默认使用RGB_8888来解码,当指定了的inPreferredConfig值不满足时,例如png图片使用RGB_565来解码时,系统默认会选择RGB_8888来解码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值