我需要将像素转换为C#中的点数。关于这个话题,我看到了一些复杂的解释,但似乎找不到简单的公式。假设标准的96dpi,我应该如何计算这个转换?
每英寸有72个点; 如果假设每英寸有96个像素足够,那么公式就很简单:
点数 = 像素 * 72 / 96
在Windows中有一种方法可以使用GetDeviceCaps
获得显示器的配置像素每英寸。 Microsoft有一个名为"Developing DPI-Aware Applications"的指南,请查找“Creating DPI-Aware Fonts”部分。
W3C已将像素测量px
定义为1/96英寸,无论您的显示器实际分辨率如何,因此上述公式对于所有Web工作都应该适用。
如果您的代码位于表单中,请尝试以下操作:
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
假设96dpi是一个巨大的错误。即使这个假设是正确的,也有一种字体缩放选项。因此,设计为10磅的字体实际上可能显示为12.5磅(125%)。
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个点)转换为像素。
例如:14个水平点 = (14 * DpiX) / 72 像素
在标准的XP / Vista / 7机器(出厂默认设置)上,点数=(像素/96)*72
在运行OSX的标准Mac(出厂默认设置)上,点数=(像素/72)*72
Windows 默认以96dpi(显示)运行 Mac 默认以72 dpi(显示)运行
72 POSTSCRIPT点=1英寸 12 POSTSCRIPT点=1 POSTSCRIPT字体 6 POSTSCRIPT字体=72点=1英寸
1点=1⁄72英寸=25.4⁄72毫米=0.3527毫米
DPI=每英寸点数 PPI=每英寸像素数 LPI=每英寸线数
如果使用em作为测量单位,请参考以下信息
16px=1em(正常文本的默认值) 8em=16px * 8 像素/16=em
points = pixels * 96 / 72
这个问题应该是:
“如何获取显示器的水平和垂直PPI(每英寸像素数)?”
1英寸有72个点(按定义,“点”被定义为1/72英寸,同样,“派卡”被定义为1/72英尺)。有了这两个信息,您可以非常容易地在px和pt之间进行转换。
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);