
作为一个新人,在做移动端UI设计的时候,往往对px,pt,ppi,dpi,dp,sp不是十分清楚,一倍图二倍图三倍图如何换算,导致切图时不知如何导出,本人在学习过程中整理汇总了一些相关知识,并尽量用最简单得语言解释。设计师在设计时可以进行参考。(如发现文中出现错误,请联系我更正)。
名词解释 :
点pt : point,印刷行业常用单位,等于1/72英寸
长度单位 dp: dip ,Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度
字体大小sp : scale-independent pixel,安卓开发用的字体大小单位。
点密度dpi : dot per inch,每英寸多少点,值越高越细腻。属于谷歌旗下第一款Android设备为160dpi,规定一倍图为160dpi。
像素密度ppi :pixel per inch,每英寸像素数,值越高屏幕越细腻。
面积相等的区域里,塞进了多少个像素,就代表像素密度有多大,塞进的像素越多即像素密度越大,肉眼所见细腻。如图1个方块代表1个像素,同一个区域里,100X100px的区域塞进去像素更多,显示时也会更清晰细腻。
计算公式及关系:
px与pt:1pt= (DPI / 72) px
即ps中,当画布分辨率为72时,pt=1px; 当新建画布分辨率为722=144ppi时,1pt=2px
dpi与ppi:安卓1倍图(163dpi)=ios1倍图(160ppi),dpi=ppi
注意:当ppi计算出来>=300,肉眼就已经分辨不出其区别。
以iphone3GS(320480px/35 inch)为例 , 为ios1倍图
接下来,我将用部分主流机型举例:由 得,
iPhone 8 (7501334px/47inch) 326 1632 为2倍图
iPhone xr (8281792px/61inch) 319 1632 为2倍图
iPhone xs (11252346/58inch) 462 1633 为3倍图
用这个公式,就可以大致判断每个机型应该是几倍图。其他就不在详细计算了,以1倍的mdpi为基准,像素密度更高或者更低的设备,只需乘以相应的倍率,就能得到与基准倍率相近的显示效果。上图:
px和dp: 1dp=(屏幕ppi/ 160)px,即1dp定义为屏幕密度值为160ppi时的1px
以WVGA屏为例,该屏幕为480px800px,按38寸屏算,点密度 √ (480^2 + 800^2) / 38 = 245,约等于240,对应于hdpi屏幕,所以该屏幕1dp=15px。安卓端屏幕大小各不相同,根据其像素密度,分为以下几种规格:
1dp定义为屏幕密度值为160ppi时的1px,即在mdpi时,1dp = 1px。 以mdpi为标准,这些屏幕的密度值比为:ldpi : mdpi : hdpi : xhdpi : xxhdpi = 075 : 1 : 15 : 2 : 3;即,在xhdpi的密度下,1dp=2px;在hdpi情况下,1dp=15px。其他类推。
dp和sp:都是安卓的开发单位,dp是长度单位,sp是字体单位,可根据用户字体大小进行缩放,一般认为1dp=1sp。
Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等,当文字尺寸是“正常”时1sp=1dp,而当文字尺寸是“大”或“超大”时,1sp>1dp。
总结:
1 在画布分辨率=72ppi时,1pt=1px
2ppi=dpi,计算公式(√ (屏幕横向像素点x^2 + 屏幕纵向像素点y^2)/屏幕尺寸inch)
3 1dp=(屏幕ppi/ 160)px
41dp=1sp
在Android中,关于屏幕的宽度、高度等的信息都封装在DisplayMetrics 类中,获取 DisplayMetrics 的方法以下几种:
不需要用到 context 的:
第一种:
DisplayMetrics metrics = new DisplayMetrics();
WindowManager manager = (WindowManager) contextgetSystemService(ServiceWINDOW_SERVICE);
if (manager != null) {
managergetDefaultDisplay()getMetrics(metrics);
}
需要用到 context 的:
第二种:
DisplayMetrics metrics = contextgetResources()getDisplayMetrics();
第三种:
DisplayMetrics metrics = new DisplayMetrics();
contextgetDisplay()getMetrics(metrics);
第四种:与第三种的方式类似,通过ApplicationContext获取。
DisplayMetrics metrics = new DisplayMetrics();
contextgetApplicationContext()getDisplay()getMetrics(metrics);
拿到DisplayMetrics之后,就可以访问里面的属性了:
// 屏幕的逻辑密度,是密度无关像素(dip)的缩放因子,160dpi是系统屏幕显示的基线,1dip = 1px, 所以,在160dpi的屏幕上,density = 1, 而在一个120dpi屏幕上 density = 075。
float density = metricsdensity;
// 屏幕的绝对宽度(像素)
int screenWidth = metricswidthPixels;
// 屏幕的绝对高度(像素)
int screenHeight = metricsheightPixels;
// 屏幕上字体显示的缩放因子,一般与density值相同,除非在程序运行中,用户根据喜好调整了显示字体的大小时,会有微小的增加。
float scaledDensity = metricsscaledDensity;
// X轴方向上屏幕每英寸的物理像素数。
float xdpi = metricsxdpi;
// Y轴方向上屏幕每英寸的物理像素数。
float ydpi = metricsydpi;
// 每英寸的像素点数,屏幕密度的另一种表示。densityDpi = density 160
float desityDpi = metricsdensityDpi;
英寸是手屏幕的计量单位。1in=254cm
像素是图像的基本采样单位,一个图像放大之后会看见一个小点,称之为像素点。
分辨率是屏幕像素的数量,pc端分辨率越高,屏幕越大。因为pc端有固定的像素密度(PPI),但只能手机就不一样,手机像素密度是不一样的。
当DPI的概念在手机上时,表示手机屏幕上每英寸可以显示像素点的数量,屏幕生产工艺越高,每英寸能容纳的像素越多。
用于印刷品的打印精度,比如常用于“设备参数”描述(扫描仪、打印机)例如,设置一张打印分辨率为96DPI,那么机器在打印过程中每英寸(inch)的长度,就是打印了96个点(dot),打印机在每英寸内打印的墨点越多,看起来越精细。
如把打印分辨率设为96,则每英寸打印的就是96个点,那么打印机在每英寸内打印的墨点数越多,看起来就越清晰。
以下四张图:由左往右,第二张是最清晰的,第四张则是很粗糙。
像素密度常用语”屏幕显示“用来表示每英寸像素点数量。
比如常使用软件ps创建文档中,分辨率72同等于像素密度。
注意:像素密度与分辨率是直接挂钩的,同一英寸的前提下,分辨率越大,像素密度(PPI)也就越大,屏幕以及显示的也就越清晰细腻;同一英寸,同一分辨率的前提下,像素密度(PPI)越大,屏幕以及显示的也就越清晰细腻。如下图显示:我们明显可以看出第二张图像素密度大,更加清晰细腻。
像素密度(PPI)计算,但一般很少使用。(横向+纵向即是长度像素+宽度像素也就是分辨率的大小;屏幕尺寸即是屏幕对角线的英寸数)
注意 当我们把相同分辨率的,放在具有相同像素显示的屏幕上显示时,每一个像素,屏幕上对应一个点显示,此时DPI=PPI, 即我们把分辨率为mn的,放在最大支持mn像素的屏幕上时,DPI=PPI。
dpi最初用于衡量打印物上每英寸的点数密度。DPI值越小越不精细。当DPI的概念用在计算机屏幕上时,就应称之为ppi。
当DPI的概念用在手机屏幕上时,表示手机屏幕上每英寸可以显示的像素点的数量。这时候我们用PPI来描述DPI在手机屏幕上的像素点。屏幕生产工艺越高,每平方英寸就能容纳更多的像素。例如一款A屏幕像素是320×480,另一个B屏幕像素是640×960。两款手机屏幕的物理尺寸都是35英寸,但像素密度(PPI)不一样。BRetina(视网屏幕)把2×2个像素当1个像素使用。在同样的物理面积内填充了更多的像素,所以显示效果更加精细。如下图,明显右边的文字更激清晰。
上文提到视网屏幕(BRetina):
视网屏幕(BRetina)由于其具备超高的像素密度,因此屏幕显示异常清晰,它的分辨率只要达到300PPI(也就是每英寸300个像素点以上),肉眼看不到像素格,很清晰很精细。
IOS逻辑分辨率和像素倍率迟到关系:
IOS尺寸设备:
目前常用的尺寸是以iPhone6为主设计,@2 750X1334px在ps设计常用,@1 375x750px是在skech设计常用(详细说明是之前设计错误,希望大家不要犯这个错误)在@2设计的基础上,状态栏40px,导航栏88px,标签栏98px,工具栏88px。
单位换算关系;
公式一:1pt=(DPI/72)px
当photoshop中新建画布的分辨率为72ppi( 即 72dpi时 ), 1pt=1px; 当新建画布分辨率为722=144ppi时,1pt=2px。
公式二:dpi=ppi
dpi最初用于衡量打印物上每英寸的点数密度。DPI值越小越不精细。当DPI的概念用在计算机屏幕上时,就应称之为ppi。同理: PPI就是计算机屏幕上每英寸可以显示的像素点的数量。因此,在电子屏幕显示中提到的ppi和dpi是一样的。
公式三: 1dp=(屏幕ppi/ 160)px
dp为安卓开发时的长度单位,根据不同的屏幕分辨率,对应的px关系也就不同。我们在切图时,可以发现安卓端屏幕大小各不相同,像素密度、分辨率也不同,可将其分为以下几种规格:
1dp定义为屏幕密度值为160ppi时的1px,即,在mdpi时,1dp = 1px。以mdpi为标准,这些屏幕的密度值比为:ldpi : mdpi : hdpi : xhdpi : xxhdpi = 075 : 1 : 15 : 2 : 3;即,在xhdpi的密度下,1dp=2px。
以WVGA屏为例,该屏幕为480px800px,按38寸屏算,点密度 √ (480^2 + 800^2) / 38 = 245,约等于240,对应于hdpi屏幕,所以该屏幕1dp=15px
公式四:当文字尺寸是“正常”时1sp=1dp,而当文字尺寸是“大”或“超大”时,1sp>1dp。一把情况下认为1sp=1dp。
dp和sp都是安卓的开发单位,dp是长度单位,sp是字体单位。
px、DP(DPI)、sp区别:(Android 设计尺寸)
因此安卓的设计尺寸是:7201080px,这时的1dp=1sp=2px
总结:由于做设计时以xhdpi为模板,xhdpi条件下,1dp=2px。若新建画布时,将画布分辨率设为144ppi,则1pt=2px=1dp。如果屏幕密度为160时,1dp=1sp=1px。
(上文参考了以下的一些文章,也是怕自己忘记,所以把认为需要重点记忆的地方摘抄下来)其中的一些文章可以部分有用的即可。
分辨率、PPI、DPI概念定义详解
>
您好 开机hidpi其实很简单只需要按照相应的步骤 *** 作即可哦
1打开终端 输入sudo defaults write /Library/Preferences/comapplewindowserver DisplayResolutionEnabled -bool YES
2获取显示器DisplayVendorID和DisplayProductID,这里推荐IORegistryExplorer,搜索框输入display 记下DisplayVendorID和DisplayProductID值,这里的就是16进制(第三步需要转换10进制,记好)的不用转换,去掉前面0x只要后面的!比如我的DisplayVendorID和DisplayProductID 就是5a63、e28
3桌面新建一个DisplayVendorID-5a63(写你自己的DisplayVendorID,以我的为例)的文件夹,然后在这个文件夹里面用PlistEdit Pro新建一个文件名字格式是DisplayProductID-e28(写你自己的显示器DisplayProductID值,以我的为例。
范本:这里DisplayVendorID和DisplayProductID值写10进制的!!!
4把DisplayVendorID-XXXX文件夹拷贝到:
/System/Library/Displays/Contents/Resources/Overrides/
(1010及以下是/System/Library/Displays/Overrides/ )
<xml version="10" encoding="UTF-8">
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 10//EN" ">
以上就是关于一篇文章帮你理清pt,px, ppi,dpi,dp,sp全部的内容,包括:一篇文章帮你理清pt,px, ppi,dpi,dp,sp、如何获取触摸屏某个区域内的dpi个数、APP单位基本认识——IOS等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)