Android BitMap图片压缩

本文介绍了Android中Bitmap的五种压缩方式,包括质量压缩、RGB_565、取样压缩、缩放压缩和通过createScaledBitmap进行的尺寸调整。讲解了不同压缩方式的特点,如RGB_565能减半内存但牺牲透明度,取样和缩放压缩适用于PNG图片且能减少内存占用。
摘要由CSDN通过智能技术生成

参考链接:
bitmap的六种压缩方式,Android图片压缩
这篇文章对概念讲述的挺好的
Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位,是2个字节

Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位,是4个字节

Bitmap.Config RGB_565:每个像素占四位,即R=5,G=6,B=5,没有透明度,那么一个像素点占5+6+5=16位,是2个字节

Bitmap.Config ALPHA_8:每个像素占八位,只有透明度,没有颜色。是1个字节

一般情况下我们都是使用的ARGB_8888,由此可知它是最占内存的,因为一个像素占32位,8位=1字节,所以一个像素占4字节的内存。假设有一张480x800的图片,如果格式为ARGB_8888,那么将会占用1500KB的内存。
480 * 800 * 32 / 8 / 1024 = 1500KB

得到一张BitMap内存方法

public static int getSizeInBytes(@Nullable Bitmap bitmap) {
        if (bitmap == null) {
            return 0;
        }


        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
            try {
                return bitmap.getAllocationByteCount();
            } catch (NullPointerException npe) {

            }
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
            return bitmap.getByteCount();
        }


        return bitmap.getWidth() * bitmap.getRowBytes();
    }

质量压缩

public static Bitmap quality(Bitmap bit, int i) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bit.compress(Bitmap.CompressFormat.JPEG, i, baos);
        byte[] bytes = baos.toByteArray();
        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    }

这里写图片描述
压缩前和压缩后BitMap里所占的内存并没有发生变化,但是bytes里面的字节数量却随着i的值变化而变化。
适合去传递二进制的图片数据。
网上说这种压缩是在保持像素的前提下改变图片的位深及透明度等。
这里写图片描述
我发现这么压缩完之后效果很差啊,apk后面的透明色都没有了。
如果你的jpg没有透明色,效果会好一些。
该方法对png图片无效。

RGB_565

这种方式压缩,内存变为原来的一半
毕竟RGB_565占用字节是ARGB_8888一半

public static byte[] bitmap2Bytes(Bitmap bm) {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值