0

DirectWrite ( SharpDX 経由) を使用して TextLayout を描画していますが、いくつかのことを除いて期待どおりに動作します。この TextLayout コンストラクターを呼び出しています。

http://sharpdx.org/documentation/api/m-sharpdx-directwrite-textlayout--ctor-2

私のコードはかなり簡単です:

// define 45 deg rotation matrix
var transformMatrix = new SharpDX.DirectWrite.Matrix();
transformMatrix.M11 = 0.7f;
transformMatrix.M12 = 0.7f;
transformMatrix.M21 = -0.7f;
transformMatrix.M22 = 0.7f;
transformMatrix.Dx = 0;
transformMatrix.Dy = 0;

var pixelsPerDip = 5;

var TextLayout = new SharpDX.DirectWrite.TextLayout(DWFactory, "Hello world!",
        TextFormat, 400, 200, pixelsPerDip, transformMatrix, true);

変換行列を任意の値に変更できますが、出力には影響しません。pixelsPerDipまた、ゼロを指定するとテキストが描画されないことを除いて、効果がないこともわかりました。SharpDX ソースを掘り下げたところ、これらの入力は正しく処理されているようです。私は何を間違っていますか?

私が使用している TextLayout コンストラクターは、CreateGdiCompatibleTextLayout(). 私が行っている/使用している何かが GDI と互換性がなく、それが原因で問題が発生する可能性はありますか?

4

1 に答える 1

2

IDWriteTextLayout コンストラクターに渡される変換は、ヒンティング/グリッド フィッティングおよびレイアウトの微妙なメトリックにのみ影響します (また、GDI 互換のピクセル整列メトリックが必要でない限り、自然なレイアウトを作成するための他のコンストラクターは、より正確なサブピクセル レイアウトを提供します)。異なる向きのテキスト レイアウトを描画するには、描画に使用するものの変換を設定する必要があります (D2D デバイス コンテキスト/レンダー ターゲットを使用している場合は SetTransform、IDWriteBitmapRenderTarget を使用している場合は SetCurrentTransform)。

于 2013-10-30T00:57:59.540 に答える