c# - 确定渲染字符在 .NET 中的宽度

标签 c#

假设我在 Arial Regular 中使用 14 号字体将字符“A”渲染到屏幕上。在 C# 中有没有一种方法可以计算它有多少像素宽?


我呈现文本的方式是通过 ESRI 的 ArcEngine,它通过 DynamicDisplay 引擎调用 GDI 或 GDI+(我不知道是哪个)。

最佳答案

这取决于所使用的渲染引擎。 .NET 可以使用 GDI 或 GDI+。可以通过设置 <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.label.usecompatibletextrendering.aspx" rel="noreferrer noopener nofollow">UseCompatibleTextRendering</a> 来完成切换相应地属性(property)或调用 Application.SetCompatibleTextRenderingDefault 方法。

当使用 GDI+ 时,你应该使用 MeasureString :

string s = "A sample string";

SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24));

使用 GDI(即 native Win32 渲染)时,您应该使用 TextRenderer 类:

SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24));

本文中描述了更多细节:

Text Rendering: Build World-Ready Apps Using Complex Scripts In Windows Forms Controls

请注意,上面讨论的是 Windows 窗体。在 WPF 中,您将使用 FormattedText

关于c# - 确定渲染字符在 .NET 中的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219798/

相关文章:

c# - 即使应用程序处于后台,Time.unscaledDeltaTime 仍然在计数

c# - 如何通过 Visual Studio 中的立即窗口访问派生类的基类的成员?

c# - 通信协议(protocol)的单元测试

c# - 在 LINQPad 中托管基于 SwaggerUI 的服务

c# - 在 C# 中,BitArray 获取位值的速度是否比简单的位移运算更快?

c# - 打印质量 winform

c# - 如何在本地测试 Azure 队列触发器函数?

c# - C# 中的命令模式和异步操作处理

c# - 并排的面板各占 50% 的宽度

c# - 本地主机上的 azure 缓存