Bitmap源码分析以及图片压缩实现方案

本文深入探讨Android中的Bitmap,分析BitmapFactory,并提供四种图片压缩方法:质量压缩、采样率压缩、缩放法压缩(使用Matrix)以及转换为RGB_565格式。通过实例展示了各种压缩技术如何影响图片大小和内存占用,强调了在保持图片质量与降低内存消耗之间的平衡。
摘要由CSDN通过智能技术生成
Bitmap源码分析以及图片压缩实现方案

Android中图片是以Bitmap形式存在,Bitmap所占内存大小的计算方式为:图片长度图片宽度一个像素点占用的字节数。为了更好的理解Bitmap,我们先来看下BitmapFactory
在这里插入图片描述

Config 占用字节大小(byte) 说明
ALPHA_8 (1) 1 代表8位Alpha位图(没有存储任何的色彩信息,每一个像素只需要1byte存储)
RGB_565 (3) 2 代表16位RGB位图,不存储Alpha值,只用2bytes存储RGB信息,其中R为5bit,G为6bit,而B为5bit
ARGB_4444 (4) 4 代表16位ARGB位图,质量太差,Android不建议使用,建议使用ARGB_8888
ARGB_8888 (5) 4 代表32位ARGB位图,并且可以提供最好质量的图片显示,A,R,G.B各占8bit
RGBA_F16 (6) 8 Android 8.0 新增(更丰富的色彩表现HDR)
HARDWARE (7) 该模式表示硬件位图如果,对该内容感兴趣,可以查看这个链接(https://muyangmin.github.io/glide-docs-cn/doc/hardwarebitmaps.html)

接下来,我将以华为Mate10来进行图片压缩测试,首先从SD卡读取一张照片

Bitmap bitmap = BitmapFactory.decodeFile(getExternalCacheDir() + "/123.jpg");
ivPic.setImageBitmap(bitmap);
Log.e(TAG, "-------->压缩前" + (bitmap.getByteCount() / 1024 / 1024) + "M" + "图片宽高为------>" + bitmap.getWidth() + "------->" + bitmap.getHeight());
    

Log输出的结果为:

MainActivity: -------->压缩前45M图片宽高为------>2976------->3968

接下来我将分别介绍下各个压缩方式

1.质量压缩

private void qualityZip() {
   
    Bitmap bitmap = BitmapFactory.decodeFile(getExternalCacheDir() + "/123.jpg");
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int quality 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值