将像素转换为点
我需要在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?我不知道,但它的工作。)