C# 字体为';GraphicsPath.AddString';比通常的字体小
出于某种原因,如果我使用AddString将字符串添加到GraphicsPath中,字体将比字体对话框中的看起来更小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
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;