[Android] Bitmap的内存计算

本文聚焦的问题1、Bitmap中像素数据占用多大内存?如何计算?2、不同图片来源对内存大小有什么影响?Bitmap bitmap = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);依然以如此声明一个bitmap为例,参数就决定了bitmap的大小。(以Android 8.0+平台为例,这行代码执行后占用的总内存大小=bitmap在…

大家好,又见面了,我是全栈君。

本文聚焦的问题
1、Bitmap中像素数据占用多大内存?如何计算?
2、不同图片来源对内存大小有什么影响?

Bitmap bitmap = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);
依然以如此声明一个bitmap为例,参数就决定了bitmap的大小。(以Android 8.0+平台为例,这行代码执行后占用的总内存大小=bitmap在栈上的引用大小+bitmap指向的堆中的对象大小+指向的对象持有的native像素数据大小,先只关注像素数据,以后再研究其他几部分的内存占用如何计算。)

像素数据的内存=图片宽 x 图片高 x 单个像素内存大小,
这里宽高均为100,单个像素的内存因为是ARGB_8888格式所以为4x8bit = 4byte,总大小=100x100x4byte。
如果宽高不变,用Bitmap.Config.RGB_565格式加载,则大小=100x100x2byte。
这是在内存中直接创建的一个bitmap,其他来源的图片加载成bitmap大小会有所不同?

一张100×100的png图片,放在下面各个不同位置,以720×1080像素4.8寸的手机(像素密度305,属于xhdpi)去加载,都加载为ARGB_8888格式,计算加载后的bitmap像素数据内存大小。
在这里插入图片描述
文件&网络&assert文件夹&res/drawable-nodpi文件夹
从这些位置加载图片会保持原尺寸,不缩放,bitmap宽高100×100,内存=100x100x4byte

res/drawable-mdpi文件夹
因为该文件夹的目标设备是mdpi,显示到xhdpi的设备上,要做放大320/160=2倍,加载后的bitmap宽高200×200,内存200x200x4byte

res/drawable-hdpi文件夹
该文件夹目标设备是hdpi,显示到xhdpi设备上,要放大320/240倍,加载后的bitmap宽高133×133,内存133x133x4byte

res/drawable-xhdpi文件夹
因为文件夹和设备屏幕像素密度相同,不做缩放,加载后bitmap宽高100×100,内存100x100x4byte

res/drawable-xxhdpi文件夹
因为文件夹目标设备是xxhdpi,显示到xhdpi设备上,要缩小320/480倍,加载后bitmap宽高75×75,内存75x75x4byte

res/drawable-xxhdpi文件夹计算方式类似。

res/drawable文件夹
该文件夹为基准分辨率,与res/drawable-mdpi文件夹效果相同。

参考
Android Bitmap加载内存占用彻底分析
Android屏幕适配知识

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121302.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ffmpeg安装_linux离线安装ffmpeg

    Ffmpeg安装_linux离线安装ffmpeg目录安装包下载解压安装包配置环境变量总结安装包下载作为音视频处理重要软件ffmpeg,是一定要装好的。windows安装包下在链接:资源包地址解压安装包下载安装包后解压到需要的目录。配置环境变量找到控制面板->点击系统->点击高级系统设置->点击环境变量配置解压或文件夹路劲到Path变量中。一直确认后,点击win+r打开cmd。输入ffmpeg-i命令验证一下是..

    2022年9月13日
    0
  • C++学习地址

    C++学习地址

    2021年8月24日
    53
  • 数据的四大特性_质量具有的四种特性

    数据的四大特性_质量具有的四种特性事务具有四个特征:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这四个特性简称为ACID特性。1

    2022年8月1日
    3
  • mybatis的二级缓存_mybatis的一级缓存

    mybatis的二级缓存_mybatis的一级缓存上次谈到了mybatis一级缓存实际上是SqlSession级别的缓存,多个SqlSession并不共享,针对这种情况,我们可以使用mybatis二级缓存来处理。1.mybatis二级缓存是什么mybatis二级缓存是mybatis的另一种缓存机制,区别于一级缓存,它是namespace级别,即一个mapper一个缓存,相互独立,互不影响。默认不开启,需要配置开启。同一namespace下的多个sqlSession可以共享缓存,大体结构如下图2.二级缓存生效的条件同一个namespa.

    2022年9月20日
    0
  • 上海市高校计算机考试准考证

    上海市高校计算机考试准考证大家好啊,距离22考研初试仅剩26天,现在这个时候,大家除了对知识点进行查缺补漏之外,也得关注一些关于考前的准备工作,还有考场的注意事项哦!因为地区的不同,考点的不同,监考老师的不同,考试的要求和规定也会有差异哦,所以大家在拿到准考证之后,一定要仔细查看考试考点的要求~#考研倒计时#打开腾讯新闻,查看更多图片>1、可不可以戴手表、手环?如果要戴手表,那必须是没有记忆及计算功能的,也就是机械表,手环算电子产品大概率是不可以带的,在进考场之前可以询问一下监考老师,确认一下是否可以带

    2022年5月7日
    63
  • 安装 Prophet

    安装 Prophet本安装文档主要翻译整理自ProphetInstallation官方安装文档。在R上安装Prophet一、Windows系统安装Prophet前的准备工作如果是Windows系统,需要按照rstan提供的教程给R安装一个编译器。其中,最为关键的一步就是先安装Rtools。1.安装R和RStudio2.安装Rtools,确保其安装…

    2022年6月25日
    79

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号