zoukankan      html  css  js  c++  java
  • 一张图片资源要占用多大内存xhdpi xxhdpi

    一张图片资源要占用多大内存,可以用下面的计算公式计算

    4 * withPixel*(targetDensity /sourcedensity) * heightPixel*(targetDensity /sourcedensity)

    4的意思是RGBA8888要占用4个字节
    widthPixel和heightPixel是图片尺寸
    targetDensity是安装的目标机器的dpi
    sourcedensity是图片资源放置的drawble目录对应的dpi

    举一个简单的例子

    一张522*686的PNG 图片,我把它放到 drawable-xxhdpi 目录下,在A机上加载,占用内存2547360B,其中 density 对应 xxhdpi 为480,targetDensity 对应A机的密度为640:

    522/480 * 640 * 686/480 *640 * 4 = 2546432B

    如果把同一张图片资源放到drawable-xxxhdpi 目录下,同样在A机上加载,占用内存1426880,其中density 对应 xxxhdpi 为640,targetDensity 对应A机的密度为640:

    522/640 * 640 * 686/640 *640 * 4 = 1426880B

    从上面的例子可以看出,图片加载到内存和图片大小本身没有关系,只与图片的尺寸和图片放置的资源目录有关,如果资源目录放置不正确,同样的图片资源占用内存可能翻倍,所以图片资源,尽量按各分辨率进行补全,不要在高分辨率的机器上使用低分别率目录里的资源。

    获取图片占用内存大小:先获取bitmap对象,然后调用下面的api
    public int getBitmapSize(Bitmap bitmap){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){     //API 19
            return bitmap.getAllocationByteCount();
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1){//API 12
            return bitmap.getByteCount();
        } else {
            return bitmap.getRowBytes() * bitmap.getHeight(); //earlier version
        }
    }

    https://www.jianshu.com/p/4c7d8600fbb9

  • 相关阅读:
    [html]Sublime Text添加插件
    [C#.Net]判断文件是否被占用的两种方法
    C#中隐式运行CMD命令行窗口的方法
    [C#.Net]启动外部程序的几种常用方法汇总
    C# 管理员身份运行程序
    [C#.net]PostMessage与SendMessage的区别
    [C#.net] SendMessage
    由浅入深了解Thrift之客户端连接池化续
    由浅入深了解Thrift之客户端连接池化
    由浅入深了解Thrift之服务模型和序列化机制
  • 原文地址:https://www.cnblogs.com/genggeng/p/10013740.html
Copyright © 2011-2022 走看看