我需要将像素转换为C#中的点。我已经看到了有关该主题的一些复杂解释,但似乎找不到简单的公式。让我们假设一个标准的96dpi,如何计算此转换?
我需要将像素转换为C#中的点。我已经看到了有关该主题的一些复杂解释,但似乎找不到简单的公式。让我们假设一个标准的96dpi,如何计算此转换?
Answers:
有每英寸72磅 ; 如果足以假设每英寸96像素,则公式很简单:
点=像素* 72/96
在Windows中,有一种方法可以获取配置的每英寸显示像素GetDeviceCaps
。Microsoft有一个名为“开发DPI感知应用程序”的指南,请查找“创建DPI感知字体”部分。
如果您的代码采用以下形式,请尝试以下操作:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
从给定的开始:
如果要基于像素(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
当然,整个问题应该是:
“如何获取显示器的水平和垂直PPI(每英寸像素)?”
一英寸有72个点(根据定义,“点”定义为英寸的1 / 72nd,同样,“ pica”定义为脚的1 / 72nd)。有了这两点信息,您就可以轻松地从px转换为pt并转换回来。
点数=(像素/ 96)*在标准XP / Vista / 7机器上为72(出厂默认设置)
点=(像素/ 72)*在运行OSX的标准Mac上为72(出厂默认设置)
Windows默认以96dpi(显示)运行Macs默认以72dpi(显示)运行
72 POSTSCRIPT点= 1英寸12 POSTSCRIPT点= 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72点= 1英寸
1点= 1⁄72英寸= 25.4⁄72毫米= 0.3527毫米
DPI =每英寸点数PPI =每英寸像素数LPI =每英寸线数
如果使用em作为测量的更多信息
16px = 1em(普通文本默认)8em = 16px * 8像素/ 16 = em
高度线转换为点和像素(我自己的公式)。以下是在“行高”字段中手动输入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?我不知道,但是有效。)