C# Wpf 4.0:图形别名格式化文本/字形运行?
在Wpf 4.0中,您可以关闭Frameworkelement及其所有子元素的文本抗锯齿功能,方法是将其置于主窗口中:C# Wpf 4.0:图形别名格式化文本/字形运行?,c#,wpf,text,drawing,C#,Wpf,Text,Drawing,在Wpf 4.0中,您可以关闭Frameworkelement及其所有子元素的文本抗锯齿功能,方法是将其置于主窗口中: TextOptions.SetTextFormattingMode(this, TextFormattingMode.Display); TextOptions.SetTextRenderingMode(this, TextRenderingMode.Aliased); 这适用于文本块等,但在使用DrawingContext的方法DrawText(FormattedText
TextOptions.SetTextFormattingMode(this, TextFormattingMode.Display);
TextOptions.SetTextRenderingMode(this, TextRenderingMode.Aliased);
这适用于文本块等,但在使用DrawingContext的方法DrawText(FormattedText)或DrawGlyphRun(..)时似乎没有任何效果
是否有可能通过DrawingContext绘制别名文本?(我知道FormattedText.BuildGeometry()技巧,但使用小文本时这看起来很糟糕)我现在没有WPF4,所以无法测试它。但通过MSDN的快速扫描显示您可以使用。在此处设置渲染模式,然后使用
RenderOpen
获取DrawingContext
问题是您希望在何处以及如何绘制此文本。有一个用于
FormattedText
的重载构造函数,它允许指定TextFormattingMode
:如何删除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();
是的,您可以将TextOptions.SetTextFormattingMode设置为DrawingVisual。使用FormattedText时,您可以获得非常清晰的结果!不幸的是,这种方式似乎无法使GlyphRunDrawing具有别名。我更喜欢Glyphrun,因为它比FormattedText快得多,而且我在Frameworkelement的重写OnRender()方法中有很多元素要绘制。
TextFormattingMode
无助于绘制别名文本。