“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”中的字体比普通字体小的主要内容,如果未能解决你的问题,请参考以下文章

ppwjs之前端达人

新版测试中

初一下期中试卷

c++理解协程05

Access中VBA中excel文件中的VLookup

Groovy闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )