题
我有一个需要转换的象素点。我已经看到一些复杂的解释有关的主题,但似乎无法找到一个简单的公式。让我们假设一个标准96dpi,我怎么calulate这种转换?
解决方案
每英寸72点;如果足以假设每英寸96像素,则公式相当简单:
points = pixels * 72/96
有一种方法可以使用 GetDeviceCaps
。 Microsoft有一个名为“开发DPI-Aware应用程序”的指南,请查看对于“创建DPI-Aware字体”部分。
W3C已将像素测量 px
定义为 1 / 96th of 1in 无论显示器的实际分辨率如何,因此上述公式应该适用于所有网络工作。
其他提示
如果您的代码位于以下格式,请尝试此操作:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
假设96dpi是巨大的错误。即使假设是正确的,也可以选择缩放字体。因此,实际上可以显示10pts的字体集,就好像它是12.5pt(125%)。
开始给出:
- 有72个点,在一英寸(这是什么一点是,1/72of an inch)
- 在一个系统设置150dpi,有150每英寸像素.
- 1在=72pt=个150像素(为150dpi设置)
如果你想找点(pt)基于像素(px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
重新安排:
x = (y/150) * 72 (2) for 150dpi system
所以:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF使用System.Windows.FontSizeConverter将点转换为像素。 FontSizeConverter使用System.Windows.LengthConverter。 LengthConverter使用因子1.333333333333333333将点(p)转换为像素(x):x = p * 1.3333333333333333
System.Drawing.Graphics具有DpiX和DpiY属性。 DpiX是水平每英寸像素数。 DpiY是垂直方向的每英寸像素数。使用它们从点(每英寸72点)转换为像素。
Ex:14个水平点=(14 * DpiX)/ 72像素
当然,整个问题应该是:
“如何获取显示器的水平和垂直PPI(每英寸像素数)?”
一英寸有72个点(根据定义,“点”定义为1/72英寸,同样“异食癖”定义为1/72英尺)。有了这两位信息,您就可以很容易地从px转换回pt并返回。实际上一定是
points = pixels * 96 / 72
points =(pixels / 96)* 72(出厂默认值)
运行OSX(出厂默认设置)的标准Mac上的points =(pixels / 72)* 72
Windows默认以96dpi运行(显示) Mac默认以72 dpi(显示)运行
72 POSTSCRIPT Points = 1英寸 12 POSTSCRIPT Points = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 Points = 1英寸
1点= 1⁄ 72英寸= 25.4⁄ 72 mm = 0.3527 mm
DPI =每英寸点数 PPI =每英寸像素数 LPI =每英寸行数
如果使用em作为测量的更多信息
16px = 1em(普通文本的默认值) 8em = 16px * 8 像素/ 16 = em
这有效:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
高度线转换为点和像素(我自己的公式)。 以下是行高度字段中手动输入213.67点的示例:
213.67 Manual Entry
0.45 Add 0.45
214.12 Subtotal
213.75 Round to a multiple of 0.75
213.00 Subtract 0.75 provides manual entry converted by Excel
284.00 Divide by 0.75 gives the number of pixels of height
这里213.67点的手动输入给出284像素。
这里213.68点的手动输入为285像素。
(为什么0.45?我不知道但是有效。)