c# - 在 .NET 中绘制文本

标签 c# .net drawing gdi+ drawstring

我正在做一些关于在 .Net 中绘制文本的测试,我得到了以下结果。

Drawing text example

所有案例都使用默认的 Windows Vista/7 字体:Segoe UI, 9

如您所见,第二个字符串与其他字符串之间存在差异(质量较差,抗锯齿不同)。我尝试在 Graphics 对象中配置抗锯齿和平滑模式,但没有任何结果。

是否可以使用 Graphics.DrawString 绘制文本并获得与其他方法相同的质量?

提前致谢。


编辑:我已经用 Reflector 检查了代码。我意识到 Graphics.DrawString 使用 gdiplus.dll 调用方法 GdipDrawString() 和 TextRenderer.DrawText 使用 user32.dll 调用 DrawTextExWDrawTextExA

对此有何评论?

最佳答案

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/

相关文章:

.net - 如何使用 ASP.net Google 分析 api 版本 3(Google.Apis.Analytics.v3.dll) 发送 Google 分析报告查询?

ios - 为什么 CGContext 没有循环绘制?

Java Swing/AWT - 使用上下文菜单绘制对象

C# 按字母顺序排序字符串,后跟出现频率

c# - 使用 DotNetOpenAuth 的两条腿 OAuth

C# 反射 : Getting the fields of a DataRow from a Typed DataSet

vb.net - 在 Visual Basic 中绘制节点图

c# - 将函数包装为异步任务

c# - 将文本框值与其他控件中的值绑定(bind)

c# - 文件 I/O 最佳实践 - byte[] 还是 FileStream?