Dan*_*lba 16 .net c# drawing gdi+ drawstring
我正在做一些关于在.Net中绘制文本的测试,我得到了以下结果.

FlatStyle设置为的本机LabelSystemGraphics.DrawString()方法绘制第二个字符串TextRenderer.DrawText()方法绘制的所有情况都使用默认的Windows Vista/7字体:Segoe UI,9
如您所见,第二个字符串与其他字符串之间存在差异(质量较差,反别名不同).我试图在对象中配置反别名和平滑模式Graphics,没有任何结果.
是否可以绘制文本,Graphics.DrawString并获得与其他方法相同的质量?
提前致谢.
编辑:我已经使用Reflector审查了代码.我意识到Graphics.DrawString使用gdiplus.dll调用方法GdipDrawString()并TextRenderer.DrawText使用user32.dll调用DrawTextExW和DrawTextExA.
有什么评论吗?
Han*_*ant 14
GDI +是微软首次尝试渲染分辨率独立文本.并且是在.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);
}
}
Run Code Online (Sandbox Code Playgroud)
Abb*_*bas 11
以下代码来自MSDN上的示例:
var fontFamily = new FontFamily("Times New Roman");
var font = new Font(fontFamily, 32, FontStyle.Regular, GraphicsUnit.Pixel);
var solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
e.Graphics.DrawString("Your Text Here", font, solidBrush, new PointF(10, 60));
Run Code Online (Sandbox Code Playgroud)
我测试了它并且工作正常,在我的表单上绘制了一个流畅的文本!;)这是文章的链接.
| 归档时间: |
|
| 查看次数: |
24999 次 |
| 最近记录: |