“GraphicsPath.AddString”中的字体比普通字体小
Posted
技术标签:
【中文标题】“GraphicsPath.AddString”中的字体比普通字体小【英文标题】:Font in 'GraphicsPath.AddString' is smaller than usual font 【发布时间】:2011-01-18 13:35:49 【问题描述】:由于某种原因,如果我使用 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);
有人知道为什么会这样吗?
【问题讨论】:
【参考方案1】:假设您的 Font.Size 的单位是 Point
,您应该将传递给 AddString
的大小转换为 emSize(限定字符的 em 方形框的高度)。
float emSize = graphics.DpiY * font.Size / 72;
【讨论】:
当有Font.SizeInPoints
时为什么要假设点单位?另外“转换为 emSize”是什么意思? Em 大小不是一个单位。为什么不告诉人们AddString
需要像素单位(我假设这是因为您的公式将点转换为像素)?
澄清上面的评论,这里提供了emSize
,因为这是Path::AddString()
的参数预期的“单位”。 “em”是排版中的一个单位,指的是相对于大写“M”的大小。请参阅this Wikipedia article 了解更多信息。【参考方案2】:
float emSize = graphics.DpiY * font.SizeInPoints / 72;
【讨论】:
您能否详细说明您的代码如何回答这个问题?以上是关于“GraphicsPath.AddString”中的字体比普通字体小的主要内容,如果未能解决你的问题,请参考以下文章
Groovy闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )