gpt4 book ai didi

c# - TextRenderer.DrawText 在 XP 和 Vista 上以不同方式呈现 Arial

转载 作者:太空狗 更新时间:2023-10-29 21:52:19 24 4
gpt4 key购买 nike

我有一个进行文本渲染的 C# 应用程序,与简单的所见即所得文本编辑器相当。

我正在使用 TextRenderer.DrawText 将文本呈现到屏幕上,并使用 GetTextExtentPoint32 来测量文本,这样我就可以在同一行上放置不同的字体样式/大小。

在 Vista 中,一切正常。然而,在 XP 中,Arial 呈现不同,某些字符(如“o”和“b”)比在 Vista 中占用更多的宽度。 GetTextExtentPoint32 似乎正在测量字符串,就像在 Vista 中一样,但宽度较小。最终结果是,一段文本有时会与它前面的文本重叠,因为前面的文本被测量为小于屏幕上的实际尺寸。

此外,我的文本呈现代码完全模仿 ie 的文本呈现(仅用于简单格式和英语),ie 的文本呈现在 vista 和 xp 之间似乎是一致的 - 这就是我注意到不同字符大小变化的方式。

有人知道发生了什么事吗?

简而言之,TextRenderer.DrawText 和 GetTextExtentPoint32 在 xp 中与 Arial 不匹配。 DrawText 似乎绘制某些字符比在 Vista 中更大和/或更小,但 GetTextExtentPoint32 似乎正在测量文本,就像在 Vista 中一样(这似乎与 ie 在 xp 和 vista 中的文本呈现相匹配)。希望这是有道理的。

注意:不幸的是,TextRenderer.MeasureString 不够快或不够准确,无法满足我的要求。我尝试使用它,但不得不撕掉它。

最佳答案

感谢您花时间回复 Adrian。

我的理解是 TextRenderer.DrawText 实际上包装了对 GDI 的调用,完全绕过了 GDI+ 文本渲染。这就是为什么我对 GetTextExtentPoint32 与输出不一致感到困惑。

不过我想我发现了问题所在。事实证明,如果您将 Graphics.TextRenderingHint 设置为 System.Drawing.Text.TextRenderingHint.ClearTypeGridFit 或其他可能的值,它会导致某些字体中的某些字符变大或变小。这似乎在 XP 中比在 Vista 中更为真实。我在 Vista 中根本没有看到它发生。无论如何,看起来 GetTextExtentPoint32 要么无法识别差异,要么我在调用时没有设置某种标志。

我的解决方案是只使用系统默认的 textrenderinghint 设置。

关于c# - TextRenderer.DrawText 在 XP 和 Vista 上以不同方式呈现 Arial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2597971/

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