http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
DPI、PPI、DP、PX 的详细计算方法及算法来源是什么?
6 个回答
ppi计算方法是长宽各自平方之和开方,除以对角线长度(单位英寸)。原理可以自己画个矩形勾股定理算一算。
2. ppi表示显示设备的点密度,dpi表示印刷品点密度。
3. dip或dp,是安卓开发用的单位,1dp表示在屏幕点密度为160ppi时1px长度。
因为安卓设备屏幕众多不可能为每个屏幕单独开发,所以用公式 px=dp*(ppi/160)计算在不同屏幕上的像素数。
举例:HVGA屏320*480,一般是3.5寸,计算点密度为√ (320^2 + 480^2) / 3.5 = 164,约等于160,1pd=1px
WVGA屏480*800,按3.8寸屏算,点密度 √ (480^2 + 800^2) / 3.8 = 245,约等于240,1dp=1.5px。
还有更高分辨率的屏幕就不一一列举了,总之dp是为了方便适配不同屏幕的单位,在不同屏幕密度下,1dp的物理长度也相同。
---------------------------------------------------------------------------
2014-2-28修改,上面看不明白的可以从这里开始看
![](http://pic2.zhimg.com/cc81dd9baee5f14b570665825906cc99_b.jpg)
液晶屏显示图像,放大来看是一个个小点组成的,这些小点就是像素点(px)。
有的手机屏幕小像素点少,比如HTC G11的4寸480x800屏幕,还有的屏幕大像素点多,比如三星note2的5.5寸720x1280屏幕。
![](http://pic4.zhimg.com/c6dd325f840c836b1f3418a3830f106f_b.jpg)
这个图标在不同的手机屏幕上显示出来,就是上图的效果。可以想象一下我们不同的手机打开同一个应用,按钮的尺寸相差很大。
图片显示大小是由什么决定的呢,屏幕尺寸?上图第1和第2个屏都是4.3英寸。像素数?第2和第3个屏都是720x1280的像素。最后我们找到了点密度(density),也就是像素数和屏幕尺寸的比值。density是每单位长度容纳的像素数量,一般用像素/英寸,也就是Pixel per inch(ppi)。
屏幕的尺寸是屏幕对角线的长度,计算对角线像素数量再除以屏幕尺寸就得到了ppi值。上面3个屏的点密度分别是217ppi,327ppi(经评论提醒,应该是342ppi),267ppi。
对比上图可以知道,ppi越低图片显示的越大,ppi越高图片显示的越小。
要让不同屏幕显示图片的大小相同,就需要对图片进行缩放,给高ppi屏提供更大的图片。
![](http://pic3.zhimg.com/8bfb234deb18787ef339ed490be1ab3a_b.jpg)
高ppi屏幕需要更大的图片才能得到同样的显示效果,反之亦然。ppi和图片px的关系如下
px1/px2=ppi1/ppi2
选定一个ppi值作为基础绘制图片,用ppi的比值计算出图片缩放比例就可以适配各种屏幕
px2=px1*(ppi2/ppi1)
安卓选定的这个基础值就是160ppi
px2=px1*(ppi2/160)
我们已经解决了图片放大缩小的问题,还需要一个单位用来描述长度(因为px不固定,inch不方便)。安卓创造了一个新的单位dp,中文名设备独立像素。并且规定在160ppi的屏幕上,1dp=1px。
设计师只需要针对160ppi的显示屏设计并制图,安卓会根据当前手机屏幕的ppi值来放大缩小图片,在不同的屏幕上得到相近的显示效果。
![](http://pic1.zhimg.com/c967dafcfdb316008650801a0ed23f2c_b.jpg)
------------------------------------------------------------
2014-2-12修改,补充部分关于SP单位的内容
安卓设备的文字单位是sp,简单理解和DP是相同的。
下面这段是从Android Design上抄的:
使用不同大小字体对比,可以创建有序的,易理解的布局。然而,在相同的用户界面有太多
不同大小的字体,会很乱。Android 框架使用以下的大小:
![](http://pic3.zhimg.com/3621f86e65fbb3f51dacc446b01c6832_b.jpg)
对应到App中:
上面这张知乎截图(简单处理过),红字标明了对应的各种文字类型。
实际使用中没有那么绝对。中文App,中号16SP文字过大,正文也常用小号14SP的。超小号12SP也不够小,例如知乎就用了更小的字号。
PS设计时,针对对应的标准(HDPI,XHDPI,XXHDPI),使用不同的px。
![](http://pic4.zhimg.com/ceaf93d22bd9ad83df43da6bbc1c48a3_b.jpg)