我正在做一些关于在 .Net 中绘制文本的测试,我得到了以下结果。
- 第一个字符串是
FlatStyle
设置为System
的原生标签 - 第二个字符串是使用
Graphics.DrawString()
绘制的方法 - 最后一个是使用
TextRenderer.DrawText()
绘制的方法
所有案例都使用默认的 Windows Vista/7 字体:Segoe UI, 9
如您所见,第二个字符串与其他字符串之间存在差异(质量较差,抗锯齿不同)。我尝试在 Graphics
对象中配置抗锯齿和平滑模式,但没有任何结果。
是否可以使用 Graphics.DrawString
绘制文本并获得与其他方法相同的质量?
提前致谢。
编辑:我已经用 Reflector 检查了代码。我意识到 Graphics.DrawString
使用 gdiplus.dll 调用方法 GdipDrawString() 和 TextRenderer.DrawText
使用 user32.dll 调用 DrawTextExW
和 DrawTextExA
。
对此有何评论?
最佳答案
GDI+ 是 Microsoft 首次尝试呈现与分辨率无关的文本。并且是在 .NET 1.x 中呈现文本的唯一方法。它因其质量问题而受到广泛批评,激发了 .NET 2.0 中 TextRenderer 和 Application.SetCompatibleTextRenderingDefault() 的引入。它使用GDI绘制文本,有效解决了上述问题。您应该只在高分辨率设备上使用 Graphics.DrawString()。打印机。
Fwiw,第二次尝试是 WPF,它也因模糊文本问题而受到很多批评。在 .NET 4 中解决。
试试这个示例表单,看看最严重的问题之一:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawString("Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
this.Font, Brushes.Black, 0, 0);
}
}
关于c# - 在 .NET 中绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268238/