DPI、PPI、DP、PX 的详细计算方法及算法来源是什么?

DPI的意思是dot per inch。即为每英寸的点数,对应dp,为什么在做UI设计时候要用dp而少用px呢?另外PPI的计算方法发是分辨率的长宽各…
关注者
1,038
被浏览
321,450

14 个回答

1. dpi是dot per inch,每英寸多少点,ppi是 Pixel per inch,每英寸像素数,针对显示器的设计时,dpi=ppi。

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修改,上面看不明白的可以从这里开始看

液晶屏显示图像,放大来看是一个个小点组成的,这些小点就是像素点(px)。

有的手机屏幕小像素点少,比如HTC G11的4寸480x800屏幕,还有的屏幕大像素点多,比如三星note2的5.5寸720x1280屏幕。

这个图标在不同的手机屏幕上显示出来,就是上图的效果。可以想象一下我们不同的手机打开同一个应用,按钮的尺寸相差很大。

图片显示大小是由什么决定的呢,屏幕尺寸?上图第1和第2个屏都是4.3英寸。像素数?第2和第3个屏都是720x1280的像素。最后我们找到了点密度(density),也就是像素数和屏幕尺寸的比值。density是每单位长度容纳的像素数量,一般用像素/英寸,也就是Pixel per inch(ppi)。

屏幕的尺寸是屏幕对角线的长度,计算对角线像素数量再除以屏幕尺寸就得到了ppi值。上面3个屏的点密度分别是217ppi,327ppi(经评论提醒,应该是342ppi),267ppi。

对比上图可以知道,ppi越低图片显示的越大,ppi越高图片显示的越小。

要让不同屏幕显示图片的大小相同,就需要对图片进行缩放,给高ppi屏提供更大的图片。

高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值来放大缩小图片,在不同的屏幕上得到相近的显示效果。


------------------------------------------------------------

2014-2-12修改,补充部分关于SP单位的内容

安卓设备的文字单位是sp,简单理解和DP是相同的。

下面这段是从Android Design上抄的:

使用不同大小字体对比,可以创建有序的,易理解的布局。然而,在相同的用户界面有太多

不同大小的字体,会很乱。Android 框架使用以下的大小:

对应到App中:

上面这张知乎截图(简单处理过),红字标明了对应的各种文字类型。

实际使用中没有那么绝对。中文App,中号16SP文字过大,正文也常用小号14SP的。超小号12SP也不够小,例如知乎就用了更小的字号。

PS设计时,针对对应的标准(HDPI,XHDPI,XXHDPI),使用不同的px。

1、DP是物理尺寸是不会变的(就像是英寸、厘米这些)
2、Px是像素点,而这个像素点的大小有可能不一样,其实PX都算不上是尺寸,我更愿意用 阵列里的“行”“列”来表示他

要明白这两点也很容易,我做个假设:

假设在同一面积的地里种树,那么1棵树就相当于1PX,然后这个种树的面积就相当于DP,所以一个区域里能种多少棵树,1DP等于多少PX,这完全取决于种树的密度,和px的密度。而这里的密度就是PPI

如下图如果两个种树的大的面积算是1DP的话,那么左边的因为密度大,所以PX就高,右边的因为密度小,所以PX就少

所以我们可以把PX看成是单位个数DP看成是单位面积,所以PX /DP=密度 这里学过数学的估计都明白,所以再明白这里的密度一切就清楚了。
而密度值是有标准的,也就是在160ppi的时候密度值是1,所以当ppi是480ppi的时候,密度就是480/160=3,这里就是为什么我们经常要弄成3的倍数了,因为默认是做480PPI的。

所以得到下面的公式:PX/DP=密度,,而密度=ppi/160,所以PX/DP=ppi/160, 所以简单换算下:PX=DP*(ppi/160)或则DP=PX*(160/ppi)