将像素转换为点

我需要在C#中将像素转换为点。 我已经看到了关于这个话题的一些复杂的解释,但似乎无法find一个简单的公式。 我们假设一个标准的96dpi,我如何计算这个转换?

每英寸有72点 ; 如果足够假定每英寸96个像素,则公式相当简单:

点=像素* 72/96

有一种方法可以在Windows中使用GetDeviceCaps获取每英寸显示器的configuration像素。 Microsoft有一个名为“开发DPI-Aware应用程序”的指南 ,查找“创buildDPI-Aware字体”部分。

无论您的显示器的实际分辨率如何,W3C已将像素测量px定义为1in的1/96 ,因此上述公式适用于所有web工作。

如果你的代码位于一个表单中,试试这个:

 Graphics g = this.CreateGraphics(); points = pixels * 72 / g.DpiX; g.Dispose(); 

假设96dpi是一个巨大的错误。 即使假设是正确的,也可以select缩放字体。 所以10p的字体实际上可以显示为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

System.Drawing.Graphics具有DpiX和DpiY属性。 DpiX是每英寸水平像素。 DpiY是垂直像素/英寸。 使用这些从点(每英寸72点)转换为像素。

例如:14个水平点=(14 * DpiX)/ 72个像素

当然这个问题应该是:

“我如何获得显示器的水平和垂直PPI(每英寸像素数)?”

一英寸有72个点(根据定义,“点”定义为1/72英寸,同样“异食”定义为一英尺的1/72)。 有了这两个位的信息,你可以很容易地从px转换到pt。

其实它一定是

 points = pixels * 96 / 72 

标准XP / Vista / 7机器上的点数(像素/ 96)* 72(出厂默认值)

在运行OSX的标准Mac上,点=(像素/ 72)* 72(出厂设置)

Windows默认运行在96dpi(显示器)Mac默认运行在72dpi(显示器)

72 POSTSCRIPT Points = 1 inch 12 POSTSCRIPT Points = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72分= 1 inch

1点= 1/72英寸= 25.4 / 72mm = 0.3527mm

DPI =每英寸点数PPI =每英寸像素数LPI =每英寸行数

更多信息如果使用em作为测量

16px = 1em(正常文本的默认值)8em = 16px * 8像素/ 16 = em

这工作:

 int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f); 

高度线转换成点和像素(我自己的公式)。 以下是在“行高”字段中手动input213.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点的手动input给出了284个像素。
这里213.68点的手动input给出285个像素。

(为什么0.45?我不知道,但它的工作。)