将像素转换为点

我有一个需要转换像素点在 C # 。我看过一些关于这个话题的复杂解释,但似乎找不到一个简单的公式。让我们假设一个标准的96dpi,我如何计算这个转换?

224889 次浏览

当然,整个问题应该是:

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

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

每英寸72点; 如果假设每英寸96像素就足够了,那么公式就相当简单:

分数 = 像素 * 72/96

有一种方法可以在 Windows 中使用 GetDeviceCaps获得每英寸显示器的配置像素。微软有一个名为 “开发感知新闻部的应用程序”的指南,请查找“创建 DPI-Aware 字体”部分。

W3C 已经将像素测量 px精确定义为 1英寸的96分之1,而不管显示器的实际分辨率如何,因此上述公式应该适用于所有的网络工作。

假设96dpi 是 巨大错误。即使假设是正确的,也可以选择缩放字体。所以一个10pt 的字体集实际上可以显示为12.5 pt (125%)。

系统。画画。图形具有 DpiX 和 DpiY 属性。DpiX 是水平方向上每英寸的像素数。DpiY 是垂直每英寸的像素数。使用这些转换点(72点每英寸)到像素。

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

如果代码位于表单中,请尝试这样做:

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

从给定开始:

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

如果你想找点(pt)基于像素(px) :

 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

事实上,一定是的

points = pixels * 96 / 72

高度线转换成点和像素(我自己的公式)。 下面是一个在 Row Height 字段中手动输入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? 我不知道,但它工作。)

WPF 使用系统将点转换为像素。窗户。字体大小转换器。FontSizeConverter 使用系统。窗户。长度转换器。LengthConverter 使用因子1.333333333333333333333333从点(p)转换为像素(x) : x = p * 1.33333333333333333333333

分数 = (像素/96) * 72在标准 XP/Vista/7机器上(工厂默认值)

在运行 OSX (工厂默认值)的标准 Mac 上,points = (像素/72) * 72

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

72分 = 1寸 12个 POSTSCRIPT 点 = 1个 POSTSCRIPT Pica 6张 POSTSCRIPT Picas = 72分 = 1寸

1点 = 1.72英寸 = 25.4.72毫米 = 0.3527毫米

DPI = 每英寸点数 每英寸像素 每英寸线

更多信息,如果使用他们作为测量

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

这种方法是有效的:

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

在 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