像素(Pixel) - 磅(Point) - 缇(Twips)


在 Windows 程序设计中,坐标的单位有很多种。

一种是我们最为熟悉的像素(Pixel),像素代表的是物理的坐标,比如我们常说的 640x480、800x600 指的就是像素。

另外比较重要的就是磅(Point)了,它是一种逻辑坐标,原是打印单位,约为 1/72 英寸,在 Windows中被确定的定义为 1/72 英寸。

还有一种比较重要的是缇(Twips),VB 缺省情况下就是使用缇作为它的单位的,20 缇等于 1 磅,所以 1 缇就是 1/1440 英寸。

另外还有几种单位,代表厘米、毫米之类的逻辑单位,我在这里就不说了。

因为 Windows 其实不知道我们的显示器的大小,所以是通过我们的设置来标示英寸的大小的。好的,我们再来看一下 Windows 中关于字号的设置。

在显示属性对话框里可以设置字体的大小,不过只有两种设置,一种是小字体,另一种是大字体。其中小字体表示 96dpi,而大字体表示 120dpi。小字体是缺省选项,而大字体是在用户所选的屏幕分辨率太大(如 1600x1200)时,为了避免字体太小看不清楚而选择使用的。另外,用户也可以自己设置字体的分辨率,不过值就不一定是多少了。

我们常说的“宋体,9”,表示的单位其实是磅,也就是 9 磅的宋体。

我们来换算一下。在小字体的时候,分辨率是 96dpi,也就是说一英寸能显示 96 个像素;9 磅是 1/8 英寸,所以 96/8=12 像素。也就是说,我们通常见到的字体就是这种 12x12 点阵的字体了。

另外,在大字体的时候,分辨率是 120dpi,9 磅是 1/8 英寸,所以 120/8=15 ,就是说大字体时,显示的 9 磅字体其实是 15x15 点阵的字体。

在 VB、VC 或 Delphi 里,对于窗体设置字体后,窗体的大小会自动随用户所选择的是大字体还是小字体而自动调整窗体的大小,这一点就是因为它们使用了逻辑单位。缺省情况下,对于 VB 来说是缇,对于 VC 和 Delphi 来说是磅。

 

 

最近一直在对cocos2d-x中的一些基础概念进行理解,一开始便对point尺寸和pixel尺寸之间的关系很模糊,于是在网上找了一下资料,并整理了自己现在的理解,如有什么理解错误的地方请大家指点一下,在这里先谢谢大家了!!
大家都知道:point构成了纸上的一幅图像,而pixel则是构成显示器上图像的基本单位,要将画好的一幅图像在显示器上显示出来就得做好point和pixel之间的映射,通俗点说就是纸上的一个point在显示器上需要几个pixel绘制才能绘制出来。
将point和pixel看作单位长度,用一个式子表示上面的关系就是: point <=对应但不一定相等=> pixel * n
现在试想,我们将一幅以point为分辨率单位,大小为resolutionInPointsX * resolutionInPointsY的2D图像在显示器中显示出来,此时它的point分辨率大小并未发生改变,只是point单位本身发生了伸缩。其中以pixel为分辨率单位的显示器大小为resolutionInPixelsX * resolutionInPixelsY。
由于图像在显示器中显示出来了,图像大小与显示器大小相等,则有:point = pixel * n (注意:这里变成了等号)
有了上面的等式我们就可以得出:width = resolutionInPointsX * pointX = resolutionInPointsX * nx * pixelX ----- a
height = resolutionInPointsY * pointX = resolutionInPointsY * ny * pixelX ----- b
且:width = resolutionInPixelsX * pixelX ----- c
height = resolutionInPixelsY * pixelX ----- d
其中pointX,pointY为point在x,y轴方向上的尺寸,pixelX,pixelY为pixel在x,y轴上的尺寸。
由式子a和c,b和d可以得出显示器中pixel分辨率大小和point分辨率大小之间的对应关系如下:
resolutionInPixelsX = resolutionInPointsX * nx
resolutionInPixelsY = resolutionInPointsY * ny
故当我们知道point尺寸时,还需要乘以一个对应的缩放因子才能得到对应的pixel尺寸,即
sizeInPixelsX = sizeInPointsX * nx
sizeInPixelsY = sizeInPointsY * ny
由于一开始我们已经知道设计尺寸resolutionInPointsX * resolutionInPointsY和显示器分辨率resolutionInPixelsX * resolutionInPixelsY,不难直接求出
nx = resolutionInPixelsX / resolutionInPointsX
ny = resolutionInPixelsY / resolutionInPointsY


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM