将像素转换为点数

时间:2008-09-26 13:57:28

标签: c# .net pixel point

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

12 个答案:

答案 0 :(得分:184)

72 points per inch;如果足以假设每英寸96像素,则公式相当简单:

points = pixels * 72/96

有一种方法可以使用GetDeviceCaps在Windows中获取显示器每英寸配置的像素数。 Microsoft有一个名为"Developing DPI-Aware Applications"的指南,请查找“创建DPI感知字体”部分。

无论显示器的实际分辨率如何,W3C都将像素测量值px定义为1/96th of 1in,因此上述公式应该适用于所有网络工作。

答案 1 :(得分:55)

如果您的代码位于以下格式,请尝试此操作:

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

答案 2 :(得分:24)

假设96dpi是巨大的错误。即使假设是正确的,也可以选择缩放字体。因此,实际上可以显示10pts的字体集,就好像它是12.5pt(125%)。

答案 3 :(得分:18)

从给定的开始:

  • 一英寸有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

答案 4 :(得分:10)

WPF使用System.Windows.FontSizeConverter将点转换为像素。 FontSizeConverter使用System.Windows.LengthConverter。 LengthConverter使用因子1.333333333333333333将点(p)转换为像素(x):x = p * 1.3333333333333333

答案 5 :(得分:4)

当然,整个问题应该是:

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

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

答案 6 :(得分:4)

System.Drawing.Graphics具有DpiX和DpiY属性。 DpiX是水平每英寸像素数。 DpiY是垂直方向的每英寸像素数。使用它们从点(每英寸72点)转换为像素。

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

答案 7 :(得分:4)

实际上一定是

points = pixels * 96 / 72

答案 8 :(得分:4)

标准XP / Vista / 7机器上的

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

答案 9 :(得分:1)

这有效:

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

答案 10 :(得分:0)

在Mac上使用wxPython获取正确的DPI如下:

    from wx import ScreenDC
    from wx import Size

    size: Size = ScreenDC().GetPPI()
    print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')

这将产生:

x-DPI:72 y-DPI:72

因此,公式为:

点:int =(pixelNumber * 72)// 72

答案 11 :(得分:-1)

高度线转换为点和像素(我自己的公式)。 以下是行高度字段中手动输入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?我不知道但是有效。)