我使用ID2D1RenderTarget::DrawGlyphRun
方法来呈现文本,但它变得有点模糊。但是,如果我使用ID2D1RenderTarget::DrawTextLayout
方法,文本会非常清晰,因为DirectWrite会执行PixelSnapping
。
所以我的问题是,即使我在使用ID2D1RenderTarget::DrawGlyphRun
方法,我如何才能进行像素捕捉?
我试着四舍五入坐标:
(int)(baselineOrigin.Y + 0.5f)
但它只在某些情况下有帮助。
在使用Direct2D呈现文本之前,对坐标进行舍入的正确方法是什么?
非常感谢,任何帮助都将不胜感激。
发布于 2019-07-23 18:45:31
为了避免文本模糊,字形的Y
位置应该四舍五入。就像你做的那样:
(int)(baselineOrigin.Y + 0.5f)
但是,您还应该考虑到ID2D1RenderTarget::GetTransform
。如果Transform的缩放比例不是1,或者是垂直移位,则需要计算字形出现的实际位置,然后才能进行舍入。
发布于 2019-07-06 01:41:13
简而言之,你不能用DrawGlyphRun()
做到这一点。像素捕捉模式通过IDWriteTextLayout::Draw()
实现的IDWriteTextRenderer
传递给Direct2D。DrawGlyphRun()
不在布局上操作,因此您没有相同的方法来控制它。
关于坐标舍入,您可能希望在水平方向上对水平布局进行舍入,而您的示例没有做到这一点。
https://stackoverflow.com/questions/56894483
复制相似问题