系统dpi与应用中的图片缩放关系
来源:互联网 发布:数组和链表有什么区别 编辑:程序博客网 时间:2024/06/07 00:29
一 、 背景
android系统在某些情况下,会默认缩放图片资源,这在EInk上会使图片发虚。如果图片资源放在nodpi下,系统就不会去缩放,目前电子书都是采 用这种方案使EInk屏幕显示原始图片的效果。但是系统dpi和应用开发中资源存放位置到底有着什么关系呢? 在实际的UI制作中又需要参考机型中的哪些属性值呢?
二、数据说明
首先先复习概念:
px (pixels)像素 – 是像素,就是屏幕上实际的像素点单位。
dip或dp (device independent pixels)设备独立像素, 与设备屏幕有关。
sp (scaled pixels — best for text size):类似dp, 主要处理字体的大小。dpi(dot per inch):屏幕像素密度,每英寸多少像素
density:density表示每英寸有多少个显示点(逻辑值),它的单位是dpi;简单的说就是一个比例系数,用来将Dip(设备独立像素)转换成实际像素px。
具体公式是: px = dip*density+0.5f;
验证设备是T63 普分屏 和 T63高分屏 机器;
dpi计算公式: dpi = √(宽^2+高^2 )÷屏幕尺寸
如:T63 XD4 的dpi = √(758^2+1024^2 )÷6 = 212.337519582
T63 TC1的dpi = √(1072^2+1448^2 )÷6 = 300.27246886
电子书dpi是在源码的 device / rockchip / rk30sdk / device.mk 文件声明了ro.sf.lcd_density的值,在电子书系统里面的/system/build.prop 系统配置文件里面也可查看;
T63XD4和T63TC1的ro.sf.lcd_density值都是实际dpi值,T63XD4为212,T63TC1为300
上图是android中定义的density和densityDpi的关系,所以T63XD4的density为: 212/160 = 1.325;T63XD4的density为:300/160 = 1.875
测试过程:
编写一个测试工程,将一张图片放置不同的资源文件夹下面,查看图片显示的实际显示效果。
原图图片大小为: 112 px * 112 px
以下是将图片放置不同资源文件夹下面的效果显示大小(单位都是px)
数据分析:
首先系统在资源查找过程中,根据android的18个资源相关维度,查询出当前应用最合适的资源文件夹。我们这里只验证在dpi这个维度的查找过程。有兴趣的同学可以跟踪系统整个查找资源过程,主要处理在系统/framework/base/core/java/android/content/res/的Resources.java,AssetManager.java 两个资源管理类里面;
从上图数据我们可以分析得出xd4和tc1机器在dpi资源文件夹中的优先级由高到低:
XD4: 1. hdpi 2. xhdpi 3. mdpi 4. ldpi 5.nodpi
TC1: 1. xhdpi 2. hdpi 3. mdpi 4. nodpi 5. ldpi
那么显示大小在android系统里面是怎么计算得来的呢?
如:
读取mdpi中资源:
XD4: 112×(212÷160)= 148.4 ≈ 148 px
TC1: 112×(300÷160)= 210 px
读取hdpi中资源:
XD4: 112×(212÷240)= 98.9333 ≈ 99 px
TC1: 112×(300÷240)= 140 px
因为我们电子书系统设置的dpi值不是android标准的dpi值,就是说不是在【120,160,240,320】里面,所以我们把资源放在hdpi,xdpi或者其他文件夹下面都是会有缩放的。最终我们放在了no-dpi里面,这个文件夹是将图片原始大小显示到屏幕的,即图片宽高多少像素,在机器里面显示就是宽高多少像素。
其实,我们可以将系统dpi设置成240或者320这样的标准dpi,然后将UI资源放置在hdpi或者xhdpi的对应的文件夹中,图片大小也是不会变的。
- 系统dpi与应用中的图片缩放关系
- 关于图片的像素,dpi与实际尺寸的关系
- 禁用Chrome跟随系统的DPI缩放
- DPI与像素的关系
- 谈谈DPI与像素的关系
- DPI与像素分辨率的关系
- 图片缩放与转换
- 图片缩放与转换
- 图片缩放与转换
- 图片缩放与转换
- 图片截取与缩放
- 图片缩放与旋转
- 图片DPI
- 信号与系统中的四个公式关系
- android应用开发中的图片缓存系统
- Windows对话框程序的大小与DPI的关系
- Android中dpi,dp(dip),px关系,与计算公式
- Android中分辨率,DPI,DP与PX对应关系
- iOS手动集成 facebook popSDK步骤
- UE4 一个Widget控制另一个Widget显示
- httpclient和urlconnection的区别
- .NET平台下Redis使用(三)【ServiceStack.Redis学习】
- CSS3-边框和背景
- 系统dpi与应用中的图片缩放关系
- cadence 元器件引脚名称 隐藏与显示
- KindEditor的使用和上传图片的后台处理
- hdu 1003 最大子段和
- 《重构-改善既有代码的设计》第四、第五章读书笔记
- Git Commit Template 提交模板
- html body 中onload 属性的作用是什么??
- Swift - 导航控制器(navigationController)全屏滑动返回功能实现
- android 蓝牙锁应用开发实例(三)蓝牙相关功能实现【第一部分】