4

職場では、テキスト文字のカーニングをより適切にサポートするために、アプリケーションのテキスト レンダリングを改善するという任務を負っています。私たちのアプリケーションは、テレビに表示される画像を生成するため、画質が最も重要です。したがって、生成する出力の外観を少し改善するだけでも非常に役立ちます。

現在のテキスト エンジンは、理想的なソリューションと思われる Uniscribe を使用して実装されています。hereで述べたように、複雑なスクリプトを使用して、コンテキストを意識した方法で合字の置換をサポートしています。また、右から左へ記述する言語と BiDi も処理します。アラビア語/筆記体言語を完全にレンダリングできるようにする必要があるため、これはすべて重要です。

したがって、Uniscribe がグリフ カーニング情報を出力していないように見えるのはかなり奇妙に思えます。問題を示すスクリーンショットを添付しました。

代替テキスト http://www.aliparr.net/kerning.jpg

私のアプリは、すべてのグリフが「モノスペース」で表示されるという点で、メモ帳と同じように機能します。Photoshop CS2 では、「T」の上部にあるブリッジが「e」の上にうまく張り出していることに注目してください。これを再現したい。

私は Pango/Freetype などの他の API を認識していますが、Uniscribe が他のすべてに優れている場合、このタスクの最後の 1% を実行するためだけにそれらすべてを含めるのは、かなり重量級のソリューションのようです。

Uniscribe を使用する手順がありませんか? これに対する最善の解決策は何ですか?Freetype は、既存の Uniscribe ソリューションと統合できるように、軽量な方法でカーニング情報をエクスポートできますか?

注意: Windows で実行する必要があるだけです。プラットフォームの移植性は、ありがたいことに、今心配する必要がある問題ではありません。

事前に乾杯!

4

3 に答える 3

1

Uniscribe を使用してカーニングを手動で実装できます。

ScriptTextOutconst int *piJustifyの引数を手動で作成してこれを行いました。

// Initially the justification is simply a copy of the advance array
int* piJustify = (int *)malloc(pcGlyphs);
memcpy(piJustify, piAdvance, pcGlyphs);

// Apply kerning to each glyph
for (size_t i = 0; i < pcGlyphs; i++) {
    if (psva[i].fClusterStart) {
        // Only add kerning to the first glyph in each cluster
        piJustify[i] += myKerning;
    }
}

pcGlyphsこれは、 、piAdvanceおよびに対して ScriptItemize、ScriptShape、および ScriptPlace を既に呼び出していることを前提としていますpsva

于 2013-12-27T08:50:28.923 に答える
0

Windows XP を実行している場合は、コントロール パネルの地域オプションで次を有効にする必要があると思います。

  • 複雑なスクリプトおよび右から左へ記述する言語 (タイ語を含む) 用のファイルをインストールします。
  • 東アジア言語のインストール ファイル

Uniscribe カーニングが機能するようにします。

于 2009-11-21T00:06:39.997 に答える