将像素转换为点

问题描述 投票:0回答:13

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

c# .net pixel point
13个回答
220
投票

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

点 = 像素 * 72 / 96

有一种方法可以使用

GetDeviceCaps
获取 Windows 中显示器的每英寸配置像素。 Microsoft 有一个名为 “开发 DPI 感知应用程序” 的指南,查找“创建 DPI 感知字体”部分。

W3C 已将像素测量值

px
精确定义为 1/96 of 1in,无论显示器的实际分辨率如何,因此上述公式应该适用于所有 Web 工作。


58
投票

如果您的代码位于表单中,请尝试此操作:

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

25
投票

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


25
投票

从给定开始:

  • 一英寸有 72 个点(也就是一个点,1/72 英寸)
  • 在设置为 150dpi 的系统上,每英寸有 150 个像素。
  • 1 英寸 = 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

8
投票

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


4
投票

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

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


3
投票

整个问题当然应该是:

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

一英寸有 72 个点(根据定义,“点”定义为 1/72 英寸,同样“异食癖”定义为 1/72 英尺)。有了这两位信息,您就可以非常轻松地在 px 和 pt 之间进行相互转换。


3
投票

其实一定是这样的

points = pixels * 96 / 72

3
投票

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

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

Windows 默认运行分辨率为 96dpi(显示) Mac 默认运行分辨率为 72 dpi(显示)

72 POSTSCRIPT 点 = 1 英寸 12 POSTSCRIPT 点 = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 点 = 1 英寸

1 点 = 1⁄72 英寸 = 25.4⁄72 毫米 = 0.3527 毫米

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

使用 em 作为测量时的更多信息

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


1
投票

这有效:

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

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


0
投票

将像素转换为点是设计的一个重要方面,需要了解数字分辨率和打印分辨率之间的关系。在此过程中,每英寸像素的密度(称为 DPI)起着至关重要的作用。转换公式,点 ,点(pt)=像素(px)/DPI 根据公式 磅 (pt):表示以磅为单位的大小,是印刷中的标准测量单位。 像素 (px):表示像素大小,是形成数字图像的最小单位。 DPI(Dots Per Inch):表示特定设备或介质的分辨率,表示每英寸的点数。 有助于实现各种媒介的一致性。

这种转换在图形设计和印刷制作中尤其重要,因为点是标准测量单位。设计师利用这种转换来确保元素在从数字屏幕过渡到印刷材料时保持其预期尺寸。

通过考虑 DPI,设计人员可以保证视觉元素保持其清晰度和比例,从而在不同平台上提供无缝且准确的表示。此转换过程体现了设计工作流程中对细节的一丝不苟,强调数字和物理领域的精度。


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.