【问题标题】:Font in 'GraphicsPath.AddString' is smaller than usual font“GraphicsPath.AddString”中的字体比普通字体小
【发布时间】: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);

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

【问题讨论】:

    标签: c# graphics fonts path gdi


    【解决方案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;
    

    【讨论】:

    • 您能否详细说明您的代码如何回答这个问题?
    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2013-05-17
    • 2021-10-21
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多