我是靠谱客的博主 过时宝贝,最近开发中收集的这篇文章主要介绍Bitmap加载内存分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、Bitmap内存

1.Bitmap内存的计算方式

1.decodeResource 从drawable、mipmap这种对应的文件目录中加载图片
Bitamp 占用内存大小 = 宽度像素 x (inTargetDensity / inDensity) x 高度像素 x (inTargetDensity / inDensity)x 一个像素所占的内存
inTargetDensity :设备的dpi
inDensity :当前文件所在drawable文件夹目录 对应的dpi
在这里插入图片描述
一个像素所占的内存,有以下几种像素格式:

ALPHA_8 1byte
ARGB_4444 2byte
ARGB_8888 4byte
RGB_565 2byte

2.从本地磁盘 、asset、等方式中加载图片
Bitamp 占用内存大小 = 宽度像素 x 高度像素 x 一个像素所占的内存

注意:当使用第三方库时,则不能用这些公式来计算,因为三方库内部会重新对内存进行优化。
eg:
fresco:不管图片来源是哪里,即使是 res,图片占用的内存大小仍旧以原图的分辨率计算。
Glide:如果有设置图片显示的控件,那么会自动按照控件的大小,降低图片的分辨率加载。图片来源是 res 的分辨率转换规则对它也无效。

注意:Bitmap的内存大小 和像素大小是不一样的。
内存大小= 像素大小(即图片宽 x 高)x 一个像素所占内存

二、影响内存的二个因素

1、图片分辨率,也就是图片尺寸
2、像素点所占内存大小,对应4种像素格式

所以我在做内存优化时,可以从这二方面来入手:
1.减小图片的尺寸
2.调整为占用内存更小的像素格式。
实际开发中,我们更倾向第一种,因为修改像素格式,会导致图片质量下降,导致失真。
而对第一种,可以参考 Luban

三、结论

  1. 图片来源是 res 内的不同资源目录时,系统会根据设备当前的 dpi 值以及资源目录所对应的 dpi 值,做一次分辨率转换,规则如下:新分辨率 = 原图横向分辨率 * (设备的 dpi / 目录对应的 dpi ) * 原图纵向分辨率 * (设备的 dpi / 目录对应的 dpi )。
  2. 其他图片的来源,如磁盘,文件,流等,均按照原图的分辨率来进行计算图片的内存大小。
  3. jpg、png 只是图片的容器,图片文件本身的存储大小与它所占用的内存大小没有什么关系。

参考

1.Bitmap分析
2.https://www.cnblogs.com/dasusu/p/9789389.html
3.Bitmap分析

最后

以上就是过时宝贝为你收集整理的Bitmap加载内存分析的全部内容,希望文章能够帮你解决Bitmap加载内存分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部