我有一个设备上下文,该上下文中已选择了一些字体,并且我想在DrawText
上使用ID2D1RenderTarget
。
目前,我按照以下路线实现此目标:
IDWriteFontFace
获取一个CreateFontFaceFromHdc
。 IDWriteFont
获得-参见下一步)从IDWriteFontFace
获取GetSystemFontCollection
。 IDWriteTextFormat
获取CreateTextFormat
,提供IDWriteFont
中指定的参数,并将nullptr
指定为fontCollection
,表明我想使用默认的系统字体集合。 IDWriteTextFormat
传递给DrawText
。 我对此感到奇怪的是,我已经在第一步中有了一个
IDWriteFontFace
,并且显然必须“返回”并向字体集合索取IDWriteFont
,只是将其传递给DrawTextFormat
,然后可以将其用于DrawText
。这似乎不必要地复杂-尤其是因为要绘制文本,系统可能仍必须使用IDWriteFontFace
,对吗?我找到了
DrawGlyphRun
,但这需要例如baselineOrigin
,我必须事先计算(更不用说glyphRun
本身)。如果我已经有了
ID2D1RenderTarget
,是否没有更简单的方法可将文本绘制到IDWriteFontFace
上? 最佳答案
就像您描述的那样,这是唯一的方法。您回去构造文本格式实例,然后将其用于DirectWrite样式呈现。 DrawGlyphRun
是一个低级方法,您当然可以使用它,但是您必须自己实现许多布局逻辑,这是需要避免的事情。一般来说,DrawText
是Direct2D渲染效率最低的方法,更好的方法是一次创建布局对象,并在每次需要重绘时使用它。