zoukankan      html  css  js  c++  java
  • 了解dpi,ppi,dp,px与android bitmap的关系

    • ppi

    pixel per inch,每英寸像素数,针对显示器的设计时,dpi=ppi。ppi计算方法是长宽各自平方之和开方,除以对角线长度(单位英寸)。

    • dpi

    dot per inch,每英寸多少点,是由ppi确定的。实际上dpi有:

      • low:120
      • medium:160
      • hdpi:240
      • xhdpi:260, 280, 300, 320
      • xxhdpi:340, 360, 400, 420, 480
      • xxxhdpi: 560, 640

    我们可以通过getResources().getDisplayMetrics().densityDpi获取手机实际的dpi。

    可以更改手机的dip:

      • 需要root手机
      • 更改/system/build.prop中的ro.sf.lcd_density属性,这个值越小,屏幕的密度越高
      • adb reboot重启手机

    快速查看手机屏幕信息:

    adb shell dumpsys display | findstr DisplayDeviceInfo

    • dp或dip

    是android开发用的单位,1dp表示在屏幕点密度为160ppi时1px长度;因为android设备屏幕众多,不可能为每个屏幕单独开发,所以用公式 px=dp*(ppi/160) 来计算在不同屏幕上的像素数。

    举例:

    HVGA屏320*480,一般是3.5寸屏,计算点密度为: √(320^2 + 480^2) / 3.5 = 164,约等于160,1dp=1px;

    WVGA屏480*800,按3.8寸屏,点密度:√(320^2 + 480^2) / 3.5 = 245,约等于240,1dp=1.5px;

    • px

    像素(pixel),屏幕上的物理点,最小的独立显示单位。

    • 与图片内存的关系

    如果将180*180的图片放hdpi目录中,那实际显示的图片大小应该为 180 * (560/240) + 0.5f = 420px,图片的大小应该为420px,同理:

    放入xhdpi目录中,实际大小应该为 180 * (560/320) + 0.5f = 315px

    放入xxhdpi目录中,实际大小应该为 180 * (560/480) + 0.5f = 210px

    现在我们知道一张图片放置在不同的资源目录中,系统decode的bitmap的size大小是如何计算了。那一张图片大概占多少内存?其实只用看一个像素占用多少内存就可以吗?

    我们知道屏幕上的颜色是有R,G,B加透明度表示的,Android官方支持的rgb格式,主要是: alpha_8, rgb_565, argb_4444, argb_8888这几种。

    以argb_8888为例,表示一个像素点,使用8位表示透明度,8位表示Red, 8位表示Green, 8位表示Blue,加起来,一个像素就需要4byte,同理,rgb_565一个像素需要2byte。

    Android decode资源图片时默认会选择argb_8888,我们知道将180*180放入hdpi目录中,那实际大小应该为420px,那像素内存大小为 420 * 420 * 4 = 705600byte = 689kb。同理:

     放入xhdpi目录中,实际大小应该为 180 * (560/320) + 0.5f = 315px,那像素内存大小为 315 * 315 * 4 = 396900byte = 387.6kb

     放入xxhdpi目录中,实际大小应该为 180 * (560/480) + 0.5f = 210px,那像素内存大小为 210 * 210 * 4 = 176400byte = 172.2kb

     

  • 相关阅读:
    eclipse安装pydev
    pymongo常见的高级用法
    android sdk下载SDK Platform失败记录
    centos7 yum安装redis(转)
    centos7 将服务添加到systemctl
    python Parent.__init()和super(Child, self)的区别
    流畅的python第二十章属性描述符学习记录
    流畅的python第十九章元编程学习记录
    python 协程的学习记录
    [转]Shell脚本之无限循环的两种方法
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/14143227.html
Copyright © 2011-2022 走看看