DirectWrite GDI 互操作:使用“IDWriteFontFace”绘制文本的简单方法

DirectWrite GDI interop: Simple way to draw text using an `IDWriteFontFace`

我有一个设备上下文,其中选择了一些字体,我想在 ID2D1RenderTarget.

DrawText

目前,我通过以下途径实现这一目标:

我对此感到奇怪的是,我在第一步中已经有了一个 IDWriteFontFace,显然必须 "go back" 并向字体集合询问 IDWriteFont,只是将其传递给 DrawTextFormat,然后可以将其用于 DrawText。这似乎不必要地复杂 - 特别是因为要绘制文本,系统可能必须降低到 IDWriteFontFace,对吗?

我找到了 DrawGlyphRun,但这需要例如baselineOrigin,我必须事先计算(更不用说 glyphRun 本身)。

如果我已经有了 IDWriteFontFace,难道没有更简单的方法将文本绘制到 ID2D1RenderTarget 上吗?

正如您所描述的,这是唯一的方法。你回去构造文本格式实例,然后用它进行 DirectWrite 风格的渲染。 DrawGlyphRun 是一个底层方法,你当然可以使用它,但是你必须自己实现很多布局逻辑,这是要避免的。一般来说DrawText是Direct2D渲染效率最低的方法,更好的方法是创建一次布局对象,每次需要重绘时都使用它。