3

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

目前,我走以下路线来实现这一目标:

  • 获得一个IDWriteFontFacevia CreateFontFaceFromHdc
  • IDWriteFont通过IDWriteFontFace默认系统字体集合(我通过GetSystemFontCollection- 请参阅下一步)获取一个。
  • 获取IDWriteTextFormatvia CreateTextFormat,提供 中指定的参数IDWriteFont并指定nullptrfontCollection,表示我想使用默认的系统字体集合。
  • 传递IDWriteTextFormatDrawText.

我对此感到奇怪的是,我IDWriteFontFace在第一步中已经有了一个,显然必须“返回”并要求一个字体集合来获取一个IDWriteFont,只是为了将它传递给一个DrawTextFormat,然后可以使用它DrawText。这似乎是不必要的复杂 - 特别是因为要绘制文本,系统可能不得不降到一个IDWriteFontFace反正,对吧?

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

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

4

1 回答 1

2

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

于 2017-12-08T04:36:23.203 回答