美文网首页
Bitmap到底加载到内存有多大?

Bitmap到底加载到内存有多大?

作者: jacky123 | 来源:发表于2016-09-05 19:44 被阅读91次

    android 手机屏幕密度等级和屏幕逻辑尺寸

    • 逻辑像素密度,是 rom 厂商设定的值,一般是取实际屏幕密度最接近的屏幕密度等级对应的值。
      getResources().getDisplayMetrics().densityDpi 可以获取到该值

    一张图片到底占用的内存有多大?

    private int sizeOf(Bitmap value) {
        return value.getRowBytes() * value.getHeight();
    }
    

    通过这个方法,我们就可以获取到一张 Bitmap 在运行时到底占用多大内存了。


    给我一张图片,我来告诉你内存占用多大

    //逻辑像素密度
    int inTargetDensity = getResources().getDisplayMetrics().densityDpi;
    
    int scaleWidth = (int) (500f * inTargetDensity / densityDpi + 0.5);
    int scaleHeight = (int) (645f * inTargetDensity / densityDpi + 0.5);
    int memory = scaleWidth * scaleHeight * 4;
    
    1. 其中 densityDpi 与 图片放入的文件夹有关,mdpi为160;hdpi为240;xhdpi为320;xxhdpi为480;xxxdpi为640.

    总结

    其实,通过前面的代码跟踪,我们就不难知道,Bitmap 在内存当中占用的大小其实取决于:

    • 色彩格式,前面我们已经提到,如果是 ARGB8888 那么就是一个像素4个字节,如果是 RGB565 那就是2个字节

    • 原始文件存放的资源目录(是 hdpi 还是 xxhdpi 可不能傻傻分不清楚哈)

    • 目标屏幕的密度(所以同等条件下,红米在资源方面消耗的内存肯定是要小于三星S6的)


    参考资料

    Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?

    相关文章

      网友评论

          本文标题:Bitmap到底加载到内存有多大?

          本文链接:https://www.haomeiwen.com/subject/kqirettx.html