zoukankan      html  css  js  c++  java
  • 图片在内存中的占用的空间大小

    这个话题有点底层了

    由于在开发当中尤其是在嵌入式设备开发当中,我们对内容使用要求很高,如Android的设备在开发过程中,我们在加载图片资源的时候,如果图片资源使用不合理经常会出现内存溢出的问题(安卓里面叫做 om(out memory) ios里面叫 内存过大),这个问题很是让人头疼。所以我们如果想要更好的把控内存的使用,因此了加载一个图片(Bitmap对象)会占用多少内存就显得至关重要。

    下面我们就以Android的设备为例来讲述,首先我们要了解一下图片在内存中是什么样子的存在。其实无论什么样图片在读到内存中就是一个矩阵模型的数据,无论在外存(机身存储或sd卡等)中是以jpg、png或者其他格式的图片读到内存中都是一样的,它在对内存的占用只与该图片的分辨率、像素模式(ARGB、RGB)、像素位数(8位、16位、32位等,其中我们通常使用的是8位的像素及0-255或0x00-0xFF)。我们图片在内存中的大小是由这三个要素决定。

    如100x100的png图片

    分辨率为100x100

    像素模式为ARGB(支持透明度,A就是Alpha透明度),就是一个像素需要使用四个基色表示。

    像素位数:通常为8位 0-255

    图片所占内存大小则是:100x100x4x8/8=40000Byte 不到40KB

    大致的计算方式就是上面所讲的。所以在使用图片的时候尤其是图片分辨率比较大的时候就要注意内存的使用情况,尽可能的使用多少图片就用多少,用不到的就是释放掉;

    还有特别注意的就是:在使用画布画图的时候生成的画布不要太大,大小分辨率够用即可如果太大,有可能光一个画布就直接把内存给占完了。加入我们生成一个10240x10240分辨率的画布所占内存就是400MB,所以对画布的使用一定要慎重。
    ————————————————

    1024 * 1024 像素的 是 400m

    假设 iphone上  放一张 图片 ,计算方法也是一样的, 但是如果给出图片是 1024 * 1024 点 的  大小,那么这个图片显示到屏幕所消耗的内存还与  屏幕的 倍数有关, 比如 6 是 @2X的 也就是说 一个点 占 2 * 2 = 4个像素,这样来看 在苹果6 上 1024 * 1024点 = 1024 * 1024 * 4(4倍的点才是像素) * 4(四个基色) * 8 /8 byte =  16m

    分析可能有漏洞,仅供参考,欢迎评论区讨论


    参考链接:https://blog.csdn.net/w1144054497/article/details/50903285/

  • 相关阅读:
    linux基础知识-12
    linux基础知识-11
    linux基础知识-10
    安装与迁移Solo博客系统
    linux基础知识-9
    linux基础知识-8
    linux基础知识-7
    linux基础知识-6
    linux基础知识-5
    通俗解释下分布式、高并发、多线程
  • 原文地址:https://www.cnblogs.com/isItOk/p/4875315.html
Copyright © 2011-2022 走看看