'GraphicsPath.AddString'中的字体比通常的字体要小

9

如果我使用AddString将字符串添加到GraphicsPath中,字体大小会比在字体对话框中看起来的要小。

  SizeF sz = g.MeasureString(Text, new Font(Font.FontFamily, (int)(Font.Size - (Font.Size / 7)), Font.Style), new PointF(0, 0), StringFormat.GenericDefault);

  this.Size = new Size((int)sz.Width, (int)sz.Height);
  //These are not the same
  fontpath.AddString(this.Text, this.Font.FontFamily,(int)this.Font.Style, this.Font.Size, new Point(0, 0),StringFormat.GenericDefault);

有人知道为什么会这样吗?这与IT技术有关。
2个回答

22

如果您的Font.Size单位为Point,则应将传递给AddString的大小转换为emSize(包围字符的em正方形框的高度)。

float emSize = graphics.DpiY * font.Size / 72;

3
为什么要默认使用点作为单位,而不使用 Font.SizeInPoints 呢?同时,“转换为 emSize” 是什么意思?Em size 不是一个单位。为什么不告诉人们 AddString 函数期望使用像素单位(我猜这是因为你的公式将点转换为像素)? - user764754
1
澄清上面的评论,emSize在这里提供是因为它是传递给Path::AddString()作为参数所期望的“单位”。 “em”是排版中相对于大写字母“M”的大小的单位。有关更多信息,请参见此维基百科文章 - Richard Hauer

1
float emSize = graphics.DpiY * font.SizeInPoints / 72;

8
你能详细说明一下你的代码如何回答这个问题吗? - brodoll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接