Wpf 4.0:绘制别名FormattedText / GlyphRun?

时间:2010-11-04 10:32:14

标签: c# wpf text drawing

在Wpf 4.0中,你可以通过放置例如它来关闭Frameworkelement及其所有子节点的Text antialiasing。在主窗口中:

TextOptions.SetTextFormattingMode(this, TextFormattingMode.Display);
TextOptions.SetTextRenderingMode(this, TextRenderingMode.Aliased); 

这适用于TextBlocks等,但在使用DrawingContext的方法DrawText(FormattedText)或DrawGlyphRun(..)时似乎没有任何效果。

是否有可能通过DrawingContext 绘制别名文本? (我知道FormattedText.BuildGeometry()技巧,但在使用小文本时看起来很糟糕)

3 个答案:

答案 0 :(得分:1)

我现在没有WPF4,所以我无法测试它。但是通过MSDN快速扫描显示您可以使用DrawingVisual。在此处设置RenderingMode,然后使用RenderOpen获取DrawingContext。

问题是您要在何处以及如何绘制此文本。

答案 1 :(得分:1)

如何删除glyphrun模糊效果:

var glyphRun = new GlyphRun(typeface, 0, false, emSize, glyphIndices, p, advanceWidths, null, null, null, null, null, null);
var rect = glyphRun.ComputeAlignmentBox();
Double halfPenWidth = 0.5;

GuidelineSet guidelines = new GuidelineSet();
guidelines.GuidelinesX.Add(rect.Left + halfPenWidth);
guidelines.GuidelinesX.Add(rect.Right + halfPenWidth);
guidelines.GuidelinesY.Add(rect.Top + halfPenWidth);
guidelines.GuidelinesY.Add(rect.Bottom + halfPenWidth);
drawingContext.PushGuidelineSet(guidelines);
drawingContext.DrawGlyphRun(brush, glyphRun);
drawingContext.Pop();

答案 2 :(得分:0)

FormattedText有一个重载的构造函数,允许指定TextFormattingModehttp://msdn.microsoft.com/en-us/library/ee474866.aspx