码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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分析

  • 相关阅读:
    为什么要使用MVP架构
    Linux——【ftp环境搭建】
    【Linux】Top命令Load average及相关CPU检查查询
    SSG、SSR、CSR的区别
    Go语言 错误处理
    17:第二章:架构后端项目:13:Swagger2接口文档工具;(在【imooc-news-dev-service-api】这个模块上,配置)
    【重识云原生】第六章容器6.1.8节——Docker核心技术UnionFS
    (五)共享模型之管程【wait notify 】
    04 如何寻找嵌入式各行业项目,嵌入式行业信息网站大全
    postgresql用户和角色
  • 原文地址:https://blog.csdn.net/MirkoWug/article/details/125413481
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号