这不是舍入问题。差异 ~ 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 窗体控件内,则它使用TextRenderer
if 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)