将像素转换为点数

Tod*_*vis 122 .net c# point pixel

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

Mar*_*som 189

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

points = pixels*72/96

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

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

  • 72点每英寸不是一个有争议的项目,它是全面的! (26认同)
  • 通常PPI是每英寸像素的缩写,而不是每英寸的点数.也许这就是混乱的来源?每英寸的点数总是72; 感谢Xetius链接. (13认同)
  • @David dpi依赖于显示,ppi是一个排版常数 (10认同)
  • @David那篇文章只是解释了为什么监视器具有可变DPI.PPI仍然是一样的.一英里的公里数不会因您驾驶的汽车而改变.假设96dpi通常不是一个好主意,但如果我们这样做,那么给定的公式是正确的. (3认同)

Hej*_*azi 56

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

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
Run Code Online (Sandbox Code Playgroud)

  • 是否值得指出 DpiX 用于宽度,而 DpiY 应用于高度? (3认同)

Joe*_*orn 25

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

  • @MadSkunk 2008年9月,我们还没有能力发表评论. (10认同)

Ian*_*oyd 19

从给定的开始:

  • 一英寸有72个点(这就是一个点,即1/72英寸)
  • 在150dpi的系统上,每英寸有150个像素.
  • 1 in = 72pt = 150px(150dpi设置)

如果要根据像素(px)找到点(pt):

 72 pt    x pt
------ = -----                  (1) for 150dpi system
150 px    y px
Run Code Online (Sandbox Code Playgroud)

重新排列:

x = (y/150) * 72                (2) for 150dpi system
Run Code Online (Sandbox Code Playgroud)

所以:

points = (pixels / 150) * 72    (3) for 150dpi system
Run Code Online (Sandbox Code Playgroud)


小智 10

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


spo*_*bug 5

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

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