私の目標は、特定の範囲のサイズと不透明度が異なる単一のレイアウトでテキストを描画することです。方法は一ID2D1RenderTarget::DrawTextLayout
通りあるようです。
defaultForegroundBrush
パラメータのドキュメント:
描画効果 ( IDWriteTextLayout::SetDrawingEffectメソッドで指定) としてブラシが関連付けられていない textLayout 内のテキストを描画するために使用されるブラシ 。
IDWriteTextLayout::SetDrawingEffect
メソッドの備考欄によると、
ID2D1RenderTarget::DrawTextLayout を使用してテキストを描画し、そのブラシを使用して指定した範囲のテキストを描画する場合、色ブラシやグラデーション ブラシなどのID2D1Brushを描画効果として設定できます。
この描画効果は指定された範囲に関連付けられており、描画時に範囲が描画されるときにコールバックを介してアプリケーションに戻されます。
ID2D1RenderTarget::DrawTextLayout
で設定されたブラシを確実に使用するようIDWriteTextLayout::SetDrawingEffect
です。この管理されていない C++ の回答は、この考えを裏付けているようです。
ただし、実際には、を使用して設定したDrawTextLayout
ものは無視されます。適切な範囲のスタイルとサイズを取得しますが、すべてが既定のブラシを使用してペイントされます。SolidColorBrush
SetDrawingEffect
これを回避するには、カスタム テキスト レンダラー ( gist ) を実装しましたID2D1RenderTarget::DrawTextLayout
。私は満足していたでしょうが、TextRendererBase
とのパフォーマンスDrawGlyphRun
は よりも 25% 以上遅くなりID2D1RenderTarget::DrawTextLayout
ます。
この問題の原因は何ですか? ドキュメントが示唆するように色を使用し、引き続き使用できID2D1RenderTarget::DrawTextLayout
ますか?