2010-11-04 24 views
1

在Wpf 4.0中,您可以通過將例如Frameworkelement及其所有子項的文本抗鋸齒功能關閉。在主窗口中:Wpf 4.0:繪圖別名FormattedText/GlyphRun?

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

這工作正常的TextBlocks等,但它似乎並沒有產生任何影響使用的DrawingContext的方法DrawText的(FormattedText)或DrawGlyphRun(..)時。

是否有機會通過DrawingContext繪製別名文本? (我知道FormattedText.BuildGeometry()技巧,但在使用小尺寸文本時看起來很糟糕)

回答

1

我現在沒有WPF4,所以我不能測試它。但通過MSDN快速掃描顯示您可以使用DrawingVisual。在這裏設置你的RenderingMode,然後使用RenderOpen來獲得DrawingContext。

問題是在哪裏以及如何繪製此文本。

+0

是的,你可以設置TextOptions.SetTextFormattingMode到DrawingVisual。使用FormattedText時,您可以獲得非常清晰的結果!不幸的是,這種方式似乎無法使GlyphRunDrawing被繪製爲別名。我更喜歡Glyphrun,因爲它比FormattedText快得多,並且我有很多元素可以在Frameworkelement的重寫OnRender()方法中繪製。 – fritz 2010-11-04 14:48:25

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();