我需要将像素转换为C#中的Points.我已经看到了关于这个主题的一些复杂的解释,但似乎找不到一个简单的公式.让我们假设一个标准的96dpi,我如何计算这个转换?
每英寸有72个点 ; 如果足以假设每英寸96像素,则公式相当简单:
points = pixels*72/96
有一种方法可以在Windows中获取每英寸显示器配置的像素数GetDeviceCaps
.Microsoft有一个名为"开发DPI-Aware应用程序"的指南,请查找"创建DPI感知字体"部分.
无论显示器的实际分辨率如何,W3C都将像素测量px
精确定义为1英寸的1/96,因此上述公式应该适用于所有网络工作.
如果您的代码位于以下形式,请尝试此操作:
Graphics g = this.CreateGraphics(); points = pixels * 72 / g.DpiX; g.Dispose();
假设96dpi是一个巨大的错误.即使假设是正确的,也可以选择缩放字体.因此,实际上可以显示10pts的字体集,就好像它是12.5pt(125%).
从给定的开始:
一英寸有72个点(这就是一个点,即1/72英寸)
在150dpi的系统上,每英寸有150个像素.
1 in = 72pt = 150px(150dpi设置)
如果要根据像素(px)找到点(pt):
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