文章插图
Android 中图片是以 bitmap 形式存在的,那么 bitmap 所占内存,直接影响到了应用所占内存大小,首先要知道 bitmap 所占内存大小计算方式:
像素数 x 像素大小可采用的压缩方法:
=
图片长度(单位为像素)x 图片宽度(单位为像素)x 一个像素点占用的字节数
- 质量压缩:内存不变,压缩转化后的 bytes.length 减少,适用于传输,png 无效
- 采样率压缩(Options):改变宽高,减少像素,采用一定的采样算法
- 缩放法压缩(Matrix):改变宽高,减少像素,采用一定的缩放算法(数字图像处理相关)
- RGB_565:改变字节数
文章插图
说明:
使用 JPEG 格式的质量压缩
bmRaw.compress(Bitmap.CompressFormat.JPEG, 50, baos)
- 对一张透明图片(png),内存、宽高不变,bytes.length 减少 。图片会失去透明度,透明处变黑,
- 对一张非透明图片(png、jpg),内存、宽高不变,bytes.length 减少 。
bmRaw.compress(Bitmap.CompressFormat.PNG, 50, baos)
- 对一张透明图片(png),没有影响
- 对一张非透明图片(png、jpg),没有影响
二、采样率样板代码:
文章插图
说明:
文章插图
The sample size is the number of pixels in either dimension that correspond to a single pixel in the decoded bitmap. 样本大小是在解码位图中对应于单个像素的任一维度上的像素个数 。也就是说,如果 inSampleSize = 2,采样后的一个像素在 x 轴上相当于之前的 2 个像素,在 y 轴上也相当于之前的 2 个像素 。即采样后的一个像素相当于之前的 2*2=4 个像素 。
三、缩放法样板代码:
文章插图
说明:
与采样率法类似 。
四、RGB_565样板代码:
val options = BitmapFactory.Options()options.inPreferredConfig = Bitmap.Config.RGB_565val bmNew = BitmapFactory.decodeResource(resources, drawableId, options)说明:
【阿里工程师:谈一谈Bitmap 的四种压缩方式】ALPHA_8 代表8位Alpha位图,一个像素1个字节 ARGB_4444 代表16位ARGB位图,一个像素2个字节 ARGB_8888 代表32位ARGB位图,一个像素4个字节 RGB_565 代表16位RGB位图,一个像素2个字节
文章插图
如果 inPreferredConfig 不为 null,解码器会尝试使用此参数指定的颜色模式来对图片进行解码,如果 inPreferredConfig 为 null 或者在解码时无法满足此参数指定的颜色模式,解码器会自动根据原始图片的特征以及当前设备的屏幕位深,选取合适的颜色模式来解码,例如,如果图片中包含透明度,那么对该图片解码时使用的配置就需要支持透明度,默认会使用 ARGB_8888 来解码 。所以直接设置 RGB_565:
- 对于一张透明图片(png),内存、宽高不变,bitmap 也不会失去透明度 。
- 对于一张非透明图片(png、jpg),宽高不变,内存减小 。
val bmScaled = bmRaw.copy(Bitmap.Config.RGB_565, true)五、最后漫漫开发之路,我们只是其中的一小部分……只有不断的学习、进阶,才是我们的出路!才跟得上时代的进步!
今年年初我花一个月的时间收录整理了一套知识体系,如果有想法深入的系统化的去学习的,可以私信我【安卓】,我会把我收录整理的资料都送给大家,帮助大家更快的进阶 。
文章插图
重要的事说三遍,转发+转发+转发,让更多需要的朋友们都可以看到并且领到!
推荐阅读
- catia机械设计工程师 catia设计工程师待遇
- 阿里巴巴网店怎么开啊流程是怎样 如何阿里巴巴开店步骤
- 梦见自己谈恋爱被绿了 梦见自己谈恋爱了很甜蜜
- 阿里P7架构师浅析:如何优化Java程序设计、编码提高性能
- 网络工程师之nslookup命令
- 面试|我月薪5千,面试如何谈到1万?
- 八宝景天的药用价值有哪些
- IPHONE11用户谈谈体验 iphone11上市时间
- 阿里大神分享API网关在微服务架构中的应用
- 汽车之家|技术工程师的金三银四,没有消失