我使用ID2D1RenderTarget::DrawGlyphRun
方法呈现文本,但是它有点模糊。但是,如果我使用ID2D1RenderTarget::DrawTextLayout
方法,则文本会非常清楚地显示出来,因为DirectWrite执行PixelSnapping
。
所以我的问题是,即使使用ID2D1RenderTarget::DrawGlyphRun
方法,如何也可以进行像素捕捉?
我试图四舍五入坐标:
(int)(baselineOrigin.Y + 0.5f)
但这仅在某些情况下有所帮助。
使用Direct2D渲染文本之前舍入坐标的正确方法是什么?
非常感谢您,任何帮助将不胜感激。
最佳答案
为了避免文本模糊,应将字形的Y
位置四舍五入。和您一样:
(int)(baselineOrigin.Y + 0.5f)
但是,您还应该考虑
ID2D1RenderTarget::GetTransform
。如果“变换”引起的缩放比例不是1或导致了垂直偏移,则需要计算字形将出现的实际位置,然后才进行舍入。