这不是一个四舍五入的问题。差异〜5+像素。
测试案例字符串:“” MACD(26,12,9)-0.000016“
e.Graphics.MeasureString("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
TextRenderer.MeasureText("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
结果始终是:
139.3942
134
为什么尺寸有这么大的差异?我只需要外部绘画方法的字符串宽度的一轮。但是它应该匹配MeasureString,反之亦然。
最佳答案
TextRenderer
使用GDI呈现文本,而Graphics
使用GDI +。两者使用略微不同的方法来布置文本,因此大小不同。
您应该使用哪一个取决于最终将用于实际绘制文本的内容。如果使用GDI + Graphics.DrawString
进行绘制,请使用Graphics.MeasureString
进行测量。如果使用GDI TextRenderer.DrawText
绘图,请使用TextRenderer.MeasureText
进行测量。
如果文本将显示在Windows Forms控件中,则在TextRenderer
设置为UseCompatibleTextRendering
(默认设置)的情况下,它将使用false
。
在问题的各行之间阅读,您似乎正在使用TextRenderer
,因为在Graphics
事件之外没有Paint
实例。如果是这样,您可以自己创建一个进行测量:
using( Graphics g = someControl.CreateGraphics() )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
如果您无权创建图形实例的控件,则可以使用该控件为屏幕创建一个实例,该控件可以很好地用于测量目的。
using( Graphics g = Graphics.FromHwnd(IntPtr.Zero) )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
关于c# - TextRenderer.MeasureText和Graphics.MeasureString大小不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6704923/