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