gpt4 book ai didi

c# - TextRenderer.MeasureText 和 Graphics.MeasureString 的大小不匹配

转载 作者:IT王子 更新时间:2023-10-29 04:18:05 29 4
gpt4 key购买 nike

这不是一个舍入问题。差异 ~ 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

为什么大小相差这么大?我只需要 paint 方法外的字符串宽度轮。但它应该匹配 MeasureString,反之亦然。

最佳答案

TextRenderer 使用 GDI 呈现文本,而 Graphics 使用 GDI+。两者使用略有不同的方法来布置文本,因此大小不同。

您应该使用哪一个取决于最终将用于实际绘制文本的内容。如果您使用 GDI+ Graphics.DrawString 绘制它,请使用 Graphics.MeasureString 进行测量。如果您使用 GDI TextRenderer.DrawText 进行绘图,请使用 TextRenderer.MeasureText 进行测量。

如果文本将显示在 Windows 窗体控件内,它使用 TextRenderer 如果 UseCompatibleTextRendering 设置为 false(这是默认值).

阅读问题的字里行间,您似乎正在使用 TextRenderer,因为您在 Paint 之外没有 Graphics 实例事件。如果是这样,您可以自己创建一个来进行测量:

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com