[英]How to draw GlyphRun with pixel snapping?
我使用ID2D1RenderTarget::DrawGlyphRun
方法來渲染文本,但它有點模糊。 但是,如果我使用ID2D1RenderTarget::DrawTextLayout
方法,文本會非常清楚,因為DirectWrite執行PixelSnapping
。
所以我的問題是即使我使用ID2D1RenderTarget::DrawGlyphRun
方法,我怎么能做Pixel Snapping?
我試圖圓坐標:
(int)(baselineOrigin.Y + 0.5f)
但它只在某些情況下有所幫助。
使用Direct2D在文本渲染之前對坐標進行舍入的正確方法是什么?
非常感謝,任何幫助將不勝感激。
簡短的回答是你不能用DrawGlyphRun()
做到這一點。 像素捕捉模式通過Direct2D實現的IDWriteTextRenderer
傳送到IDWriteTextLayout::Draw()
。 DrawGlyphRun()
不在布局上運行,因此您沒有相同的方法來控制它。
關於坐標舍入,您可能希望在水平方向上舍入以進行水平布局,並且您的示例不會這樣做。
為了避免文本模糊,字形的Y
位置應該舍入。 就像你做的那樣:
(int)(baselineOrigin.Y + 0.5f)
但是,您還應該考慮ID2D1RenderTarget::GetTransform
。 如果Transform導致比例不是1或導致垂直移位,則需要計算字形出現的實際位置,然后才能舍入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.