2010-02-18 101 views
5

出于某种原因,较小的,如果我添加一个字符串的GraphicsPath使用AddString的字体将是小于它看起来像在字体对话框。字体在“GraphicsPath.AddString”比平时字体

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); 

有谁知道为什么它可能会那么做吗?

回答

19

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

float emSize = graphics.DpiY * font.Size/72; 
+1

为什么当有'Font.SizeInPoints'承担定点单位?另外“转换为emSize”是什么意思? Em尺寸不是一个单位。为什么不告诉人们'AddString'需要像素单元(我假设这是因为你的公式将点转换为像素)? – user764754 2016-03-26 19:28:28

2
float emSize = graphics.DpiY * font.SizeInPoints/72; 
+6

您能否详细说明您的代码如何回答问题? – brodoll 2015-10-30 00:47:56