2

DirectWriteとDirect2D1を使用して、IllustratorCS6がエリアテキストボックスに対して行うレンダリングを模倣しようとしています。CS6には、フォントの「emボックスサイズ」に等しい領域テキストボックスの上部からベースラインを配置できるオプションがあります。たとえば、Trajan Proフォント、100ポイントのポイントサイズを使用すると、ベースラインはエリアテキストボックスの上部から87.5ポイントになります。

IDWriteFontFaceオブジェクトから、ascent、descent、designUnitsPerEm値などを取得できます。

欠落しているように見えるのは、emボックスの上部を基準にしたベースラインの位置です。

emボックスの上部を基準にしたデザインユニットのベースライン位置を取得する方法はありますか?

DWRITE_FONT_METRICSにはありません。DWRITE_LINE_METRICSを確認しましたが、ベースライン値がascent + lineGapであり、一致していません。

4

1 に答える 1

1

これは部分的な答えにすぎませんが、ここで説明します。同様のシナリオでこれを処理する方法は次のとおりです。

EMの高さ-上昇=ベースライン

私が確信していないのは、ラインギャップをどのように適用するか、あるいは適用する必要があるかどうかです。多くのフォントの行ギャップはゼロであるため、関係ありません。実際、cssの世界では、行の高さが1.2 * EMの高さであることを示すことで、行ギャップにAddを追加することは珍しくありません。そのギャップの分布を本当に知る必要があるとき、私はいつもそれをまともな高さの直後であるとまとめましたが、それが100%正しいとは完全には確信していません、それは私がすることには十分です。

一般に、EMの高さ=上昇+下降+ラインギャップの順です。あまりにも、負のラインギャップがあることは完全に有効であると私は信じていますが、それはすべて下に、半分は上に、半分は下に分散されます(これは実際には意味がないと思いますが、間違っている可能性があります)、または何であれ、あなたはそれについて一貫している必要があります。お役に立てれば。

于 2012-12-27T21:10:30.387 に答える