C# 字体为';GraphicsPath.AddString';比通常的字体小

C# 字体为';GraphicsPath.AddString';比通常的字体小,c#,graphics,fonts,path,gdi,C#,Graphics,Fonts,Path,Gdi,出于某种原因,如果我使用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.W

出于某种原因,如果我使用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);

有人知道它为什么会这样做吗?

假设您的Font.Size的单位是
Point
,您应该将传递给
AddString
的大小转换为emSize(限制字符的em方形框的高度)


你能详细说明一下你的代码是如何回答这个问题的吗?当有
Font.SizeInPoints
时,为什么要假设点单位?“转换为emSize”是什么意思?Em大小不是一个单位。为什么不告诉人们
AddString
需要像素单位(我假设是因为你的公式将点转换为像素)?
float emSize = graphics.DpiY * font.Size / 72;
float emSize = graphics.DpiY * font.SizeInPoints / 72;