在160dpi的手机上1px=1dp,这句话的以上是说 ,手机屏幕宽带被分割成了160块,每一块有一个像素点,每一块就是一个dp。 那么1dp=1px
而320dpi的手机上,分辨率是上一个手机的两倍,手机屏幕宽带也被分割成了160块,每一块有两个像素点,每一块也是一个dp,那么1dp=2px
上面分析来自于android学习手册,360手机助手中可以下载,里面有108个android例子,源码文档都可在里面看,下面是截图
下面是dp与px的转换公式,也来自android学习手册,经常使用。
import androidcontentContext;
public class DensityUtil {
/
根据手机的分辨率从 dp 的单位 转成为 px(像素)
/
public static int dip2px(Context context, float dpValue) {
final float scale = contextgetResources()getDisplayMetrics()density;
return (int) (dpValue scale + 05f);
}
/
根据手机的分辨率从 px(像素) 的单位 转成为 dp
/
public static int px2dip(Context context, float pxValue) {
final float scale = contextgetResources()getDisplayMetrics()density;
return (int) (pxValue / scale + 05f);
}
}
不论是DPI还是PPI,实际都是一种换算的概念,即将承载的信息换算为现实中的(即人眼能实际看到的图像)。DPI和PPI的区别在于换算的途径不同,DPI面向的是印刷受体,而PPI面向的是荧幕。
PPI是英文Pixels Per Inch的缩写,意为像素每英寸。英寸是常用的长度单位,大约相当于254厘米。而像素是专用于荧幕的概念,指的是荧幕可以解析的最小的点。因此,PPI值得是像素在荧幕上的密度,PPI越高图像就越清晰
举例来说,如果电脑屏幕是2K分辨率,即1920×1080像素,它的图像宽为1920像素。而如果这个电脑屏幕的物理宽度是192英寸,电脑屏幕是分辨率就是1920/192=100PPI。
DPI是英文Dots Per Inch的缩写,意为点每英寸。应粗你还是那个英寸,但是点的意义有很多。一般来讲,你可以把Dot理解为取样点,即物理设备可以解析的最小单位。在印刷时,它就可以作为印刷网点,而在鼠标等电子设备上,可以理解为最小操作阈值(即设备会把多么远的两个点当作一个点来处理)。
我们仍然拿1920×1080像素的来举例子,如果印刷设备的解析能力刚好是100DPI,而且你要印制的纸张尺寸刚好是192英寸,那么印刷设备就可以刚好把一个像素作为一个取样点,印刷完成后的保真度是百分之百(也就是所有的视觉信息都被印刷出来了)。在大多数情况下,这几个数值都不那么整好,因此保真度会产生损失。
1在条件允许的情况下,分辨率越高越好 我们可能不会有精力去关心信息量的DPI是多少,印刷设备的DPI又是多少这种细节的问题。但有一点是可以确定的,那就是只要足够大,印刷就会清晰。
2如果有可能,使用准确的数值 许多软件可以帮助你了解实际尺寸下的PPI,比如使用Photoshop,在300PPI下创建A4的文件(尺寸21×297厘米,对应分辨率2480×3508像素)并做出,那么大多数情况下都可以完美印刷。
正如前文所述,大多印刷设备的解析能力是300DPI,因此在该的信息量下,1个像素刚好对应1个点,甚至不需要栅格处理。而如果你强行使用400PPI来创建A4尺寸的文件,拿到300DPI的设备上会被栅格,说不定还不如300DPI的质量好(毕竟是有损处理,但这种差别未必能看得出来)。
下图是苹果官方对iPhone 机型的介绍:
拿iPhone7 Plus来说:
屏幕尺寸:55英寸
手机分辨率(像素):1920 (高)x 1080(宽)
PPI:401
屏幕尺寸:表示手机屏幕对角线的长度,单位是英寸。1英寸(inch)=254厘米(cm)
手机分辨率:分辨率可以从显示分辨率与图像分辨率两个方向来分类。
显示分辨率(屏幕分辨率):屏幕 图像 的精密度,是指 显示器 所能显示的 像素 有多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越 精细 ,同样的屏幕区域内能显示的信息也越多。
图像分辨率:单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义。
分辨率的单位:(dpi 点每英寸 )、lpi(线每英寸)和ppi( 像素每英寸 )。但只有lpi是描述光学分辨率的尺度的。虽然dpi和ppi也属于分辨率范畴内的单位,但是他们的含义与lpi不同。而且lpi与dpi无法换算,只能凭经验估算。ppi和dpi经常都会出现混用现象。但是他们所用的领域也存在区别。从技术角度说,“像素”只存在于电脑显示领域,而“点”只出现于打印或印刷领域。
ppi:Pixels Per Inch,屏幕像素密度,每英寸屏幕所拥有的像素数,在电脑显示领域使用。
dpi:Dots Per Inch,每英寸长度上的点数,在打印领域使用。
屏幕像素密度,分辨率,屏幕尺寸的关系
所以美工使用PS作图的大小为手机分辨率的大小。
如需要设计适配iPhone7的手机,我们使用1334 x 750px大小
但有一点是特殊的,就是iPhone6(s) plus、iPhone7 plus,我们需要使用2208 x 1242px大小,
原因:
ppi为326的手机,使用的为@2x的素材,对于ppi是401的手机,理论上苹果应该用401/326 @2x=@246x的素材。但是这个奇葩的比例对开发者而言很难切图。所以苹果为方便开发者用的是@3x的素材,然后再缩放到@246x上,实际上是缩放到246/3=83%。实际上苹果选取了一个接近比例的87%。
这样算下来,物理分辨率和虚拟分比率的比例是87%,也就是1920/087=2208,1080/087=1242
好处就是开发者更方便,比如准备素材时,字号可以直接调成3x的。
概述
前段时间看了小米8的发布会,其中屏幕参数是如下介绍的:
当时我就在想这都是怎么算出来的,虽然我知道 PPI 是指屏幕每一英寸上包含的像素点,但是稍微往深一想我发现我对这些参数真的很迷茫,好奇心驱使我做了些调查。
像素,英文为 Pixel ,是我们日常最熟悉不过的了,但是深入进去会发现其蕴含的知识量是巨大的,此篇对于像素话题也只是浅尝辄止,抛砖引玉。
讨论像素需要分不同的场景: 1 数字图像 我们程序员日常工作中接触并讨论的像素大多是指这个范畴。
光栅(Bitmap)是我们日常接触最多的,例如 jpg,jpeg,png,gif,bmp等等,另一种比较常见的就是矢量图了。 光栅是由一个一个像素组成的,那么像素包含哪些信息?有物理尺寸吗?
每个像素由颜色信息组成,有的还包含一个透明度信息。因为可以通过三原色 Red , Blue , Green 来混合出很多种颜色,所以一个像素就可以使用存储这三种颜色的一个数据结构表示。一个像素占用内存的大小,与其使用多少位来表示这些颜色有关,例如最简单的像素只有一个 bit ,那么它只能表示两个状态,0或者1,对应到图像上也就是黑白。当一个像素达到24 bit 的时候,RGB每个通道占8位,可以组合出来的颜色已经有1677万色(256 256 256=16,777,216)种了,而人类眼睛可以分辨的颜色也只有大概1000多万种,此时就是真彩色了。当然还有32位真彩色,感兴趣的可以去研究。
来自 维基百科
那么通过以上的介绍,我们可以得出结论,此处的像素没有物理尺寸,仅仅是一些数据,只有将其显示在物理设备上才会存在物理尺寸。
可以通过下图感受一下
来源
讨论分辨率仍然需要分讨论场景 1 数字图像 此时分辨率是用来描述的像素信息的,比如我们说一张的分辨率是1280 720,那么仅仅是说明这张是由1280个像素 720个像素组成的。如下图所示,至于这张的尺寸有多大,清晰还是模糊,这取决于它自身的存储格式以及用来显示它的设备。
2 硬件显示设备 是指这块屏幕所包含的像素(这个像素是物理上的,前面我们已经讨论过了)。例如小米8的屏幕分辨率为2248x1080,说明这块屏幕包含了这么多物理像素。
那么的分辨率与屏幕的分别率是什么关系呢?这需要清楚了 PPI 后才可以回答这个问题。
DPI 是印刷业使用的单位,其表示的是打印纸上每一英寸包含的墨点数量,而 PPI 是电子屏幕上每一英寸上包含的可寻址物理物理显示单元。其中英寸是西方惯用长度单位,等于254厘米。这两个概念之所以如此容易混淆,就是因为一些软件提供商做的孽,例如Microsoft,Adobe,Apple 等等,他们经常将这两个概念互换使用。
PPI : Pixels Per Inch, 每一英寸上包含的像素个数。 这个值越高,屏幕的显示能力越强,例如小米8 PPI的计算方式如下图所示
可见小米8的 PPI 是4016,而其官方宣称为402,估计是四舍五入了,不过不知道半个像素怎么处理,知道的可以告诉我一下。
DPI : Dots Per Inch, 每一英寸上包含的点个数。 与PPI计算方式一样,只是应用的领域不同,这个用在印刷业的。
至此我们可以回答的分辨率与屏幕的分辨率的关系了,以小米8为例,按照 比例全屏 显示某一张: 第一:当将一张1080 2248像素的显示在Mi8上时,屏幕上的每一个物理像素对应一个像素,可以完美显示。 第二:当将一张2000 2248像素的显示在Mi8上时,Mi8的屏幕在宽度上是无法显示的,所以显卡会将光栅化,通过一定的算法将2000个像素减少到1080个像素,由于是从多到少的处理,所以是清晰的。 第三:当将一张7201280像素的显示在Mi8上时,显卡会将光栅化,将以其中一边为标准拉伸,会变模糊。
Pt :汉语翻译为 榜 ,是一个物理尺寸,长度为1/72 英寸,在概念上Pt与Px毛关系也没有,但是在 photoshop 中就有关系了。 photoshop 中的pt却是一个相对单位(这帮二货各种混用)
换算公式: 1pt= (DPI / 72) px 。
dp : Density-independent Pixels, 这个是Android基于物理设备的 ppi 抽象出来的一个单位。它是以 160dpi 的屏幕为基准定义的,在 160dpi 的屏幕的屏幕上 1dp=1px ,那么我们就可以得出其
换算公式: 1dp=(屏幕ppi/ 160)px
目前Android系统的屏幕分类如下表 |密度分类| 屏幕密度 | |--|--| |ldpi |120dpi | |mdpi |160dpi | |hdpi |240dpi | |xhdpi |320dpi | |xxhdpi |480dpi | |xxxhdpi |640dpi |
sp : Scale-independent Pixels,其与dp基本一样,也是像素无关的,但是是用在描述字体的大小上。其尺寸会同时相应屏幕密度以及用户对字体的偏好设置。 例如:在手机的字体设置为默认大小时,使用 dp 与 sp 描述字体的大小是一样的,如下图
但是当我们改变了手机的字体默认设置的字号后, dp 描述的字体大小没有变化,但是 sp 描述的字体大小却相应的发生了变化,如下图。
除此之外 dp 与 sp 再无差异,一般建议字体使用 sp 作为单位。
dip 就是 dp 互为别名,没有任何区别,其与 px 关系见上文。
以上就是关于显示接触GUI开发的程序员应该了解的,本来以为很简单,但是调查后发现再往深研究我将会陷入泥潭无法自拔。同时我也感受到,人类社会发展到目前的水平,任何一个门类的知识都足以让一个人投入终身的时间去研究,那我们程序员除了赚钱养家是不是应该找个自己感兴趣方向忠贞不渝的投入一生业余精力去尝试研究一番呢?在此我觉得我很挫败,突然发现自己这么大年纪了竟然没有爱好,如果爱好美女这个不算的话。。。!
我们的原图是一份长宽都是1800像素的。
这张长宽都是1800像素 ,对它自己而言,DPI和PPI没有意义。
它的分辨率参数,仅仅是1800像素而已。
假设我们的所有印刷机、打印机、喷绘机,在原尺寸下都将1像素映射为1个点(即1Px/Dots),可以进行下面这些计算。
如果我们使用300DPI的印刷机,原尺寸打印这张图,那么它的长宽为:
1800 Px / (1Px/Dots) / 300 DPI = 6 in 即长宽都是6英寸(1524厘米)。
如果我们使用220DPI的打印机, 原尺寸打印这张图,那么它的长宽为:
1800 Px / (1Px/Dots) / 220 DPI ≈ 819 in 即长宽都是819英寸(208厘米)。
如果我们使用72DPI的喷绘机, 原尺寸打印这张图,那么它的长宽为:
1800 Px / (1Px/Dots) / 72 DPI = 25 in 即长宽都是25英寸(635厘米)。
使用81PPI的一般显示器,原尺寸显示这张图, 那么它的长宽为:
1800 Px / 81 PPI ≈ 222 in 即长宽都是222英寸(564厘米)。
显示器的PPI 我们假设显示器是方形像素,那么显示器的PPI是由它的分辨率和长宽共同决定的。
即显示器的横向PPI=显示器的横向分辨率(Px)/显示器的宽度(in)。
我们常说的显示器的英寸数,是其对角线的长度。 对于16:9的显示器来说,PPI可以这样计算:
PPI = sqrt { (像素宽 像素高) / [16 9 英寸数^2 / (16^2 + 9^2)] }
举例来说,19201080像素的24寸显示器,PPI就是:
PPI = sqrt { (1920 1080) / [16 9 24^2 / (16^2 + 9^2)] } ≈ 917878
下面的表格计算了常见显示器尺寸的PPI,你可以用这个公式检验:
411
手机的dpi设置411性能最高。点开手机桌面的设置,在设置界面找到显示功能,点击进入,下拉就可以找到屏幕分辨率选项,点击进入后就可以选择最高,为411。dpi是单位,一般指每英寸的像素
欢迎分享,转载请注明来源:品搜搜测评网