WPF のタイポグラフィ

このトピックでは、WPF の主要な文字体裁機能について説明します。 これらの機能には、テキスト レンダリングの品質とパフォーマンスの向上、OpenType タイポグラフィのサポート、国際対応テキストの強化、フォントのサポートの強化、新しいテキスト API (アプリケーション プログラミング インターフェイス) が含まれます。

テキストに関する品質とパフォーマンスの向上

WPF のテキストは、テキストをわかりやすく、読みやすくする Microsoft ClearType を使用して描画されます。 ClearType は、ラップトップや Pocket PC の画面、フラット パネル モニターなど、既存の LCD (液晶ディスプレイ) でのテキストの読みやすさを向上させるために Microsoft によって開発されたソフトウェア テクノロジです。 ClearType では、ピクセルの画素レベルで文字を表示調整することで実際の形状を忠実に再現したテキストを表示できる、サブピクセル レンダリングが採用されています。 解像度が上がるとテキスト表示の微細部の鮮明度が高くなるため、長時間にわたって読んでも苦になりません。 WPF での ClearType のもう 1 つの改良点は、y 方向のアンチエイリアシングです。これにより、テキスト文字の緩やかな曲線部の上下が滑らかになります。 ClearType の機能の詳細については、「ClearType の概要」を参照してください。

Text with ClearType y-direction anti-aliasing
ClearType の y 方向アンチエイリアシングを適用したテキスト

WPF では、コンピューターがハードウェアの最小要件を満たしていれば、テキスト レンダリング パイプライン全体に対してハードウェア アクセラレータを使用できます。 ハードウェアを使用して実行できないレンダリングは、ソフトウェア レンダリングとなります。 ハードウェア アクセラレータは、個々のグリフの格納から始まり、グリフ実行への複数のグリフの合成、効果の適用、最終的な表示出力への ClearType ブレンディング アルゴリズムの適用まで、テキスト レンダリング パイプラインのすべてのフェーズに影響します。 ハードウェア アクセラレータの詳細については、「グラフィックスの描画層」をご覧ください。

Diagram of the text rendering pipeline

また、アニメーション化されたテキストは、文字とグリフのいずれによる場合でも、WPF で有効化されているグラフィックス ハードウェア機能をすべて利用できます。 これにより、テキスト アニメーションが滑らかになります。

多彩な文字体裁

OpenType フォント形式は、TrueType® フォント形式の拡張です。 OpenType フォント形式は、Microsoft と Adobe が共同で開発したもので、高度なタイポグラフィ機能を豊富に備えています。 Typography オブジェクトでは、スタイル代替グリフや飾り付きなど、OpenType フォントの高度な機能の多くが公開されています。 Windows SDK には、Pericles フォントや Pescadero フォントなど、豊富な機能を持つ OpenType フォント サンプルが用意されています。 詳細については、「OpenType フォント パックのサンプル」をご覧ください。

Pericles OpenType フォントには、標準グリフ セットにスタイル代替グリフを提供する追加グリフが含まれています。 次のテキストでは、スタイル代替グリフが表示されています。

Text using OpenType stylistic alternate glyphs

飾り付きは装飾的なグリフで、カリグラフィを連想させる、手の込んだ装飾が使用されます。 次のテキストは、Pescadero フォントの標準および飾り付きグリフを示したものです。

Text using OpenType standard and swash glyphs

OpenType の機能の詳細については、「OpenType フォントの機能」を参照してください。

国際対応テキストのサポートの強化

WPF では、次の機能を提供することで、国際対応テキストのサポートを強化しています。

  • すべての書記体系における、適用可能な単位を使用した自動行間隔設定。

  • 国際対応テキストの幅広いサポート。 詳細については、「WPF のグローバリゼーション」をご覧ください。

  • 言語に合わせた改行、ハイフネーション、両端揃え。

フォントのサポートの強化

WPF では、次の機能を提供することで、フォントのサポートを強化しています。

  • すべてのテキストに対応する Unicode。 フォントの動作や選択に文字セットやコードページが不要になりました。

  • システム ロケールなど、グローバル設定に左右されないフォント動作。

  • FontFamily を定義するための個別の FontWeightFontStretchFontStyle 型。 これにより、斜体と太字のブール値の組み合わせでフォント ファミリを定義する Win32 プログラミングよりも優れた柔軟性が提供されます。

  • フォント名とは関係なく処理される書き込み方向 (横書きまたは縦書き)。

  • 複合フォント技術を使用した、移植可能な XML ファイルにおけるフォント リンクとフォントの代替。 複合フォントは、完全な多言語フォントの構築を可能にします。 また、複合フォントは、欠落グリフの表示を防ぐ機能も備えています。 詳細については、FontFamily クラスの「解説」を参照してください。

  • 単一言語フォントのグループを使用した、複合フォントから構築される国際対応フォント。 これにより、複数言語に対応するフォントの開発時にリソースのコストを節約できます。

  • ドキュメントに埋め込むことで移植性が得られる複合フォント。 詳細については、FontFamily クラスの「解説」を参照してください。

新しいテキスト API (アプリケーション プログラミング インターフェイス)

WPF では、開発者がアプリケーションにテキストを含めるときに使用できるいくつかのテキスト API が提供されています。 これらの API は、次の 3 つのカテゴリに分類されます。

  • レイアウトとユーザー インターフェイス: グラフィカル ユーザー インターフェイス (GUI) に対応した一般的なテキスト コントロールです。

  • 軽量テキスト描画: オブジェクトにテキストを直接描画できます。

  • テキストの高度な書式設定: カスタム テキスト エンジンを実装できます。

レイアウトとユーザー インターフェイス

最上位の機能レベルでは、テキスト API により、LabelTextBlockTextBox などの一般的な UI コントロールが提供されます。 これらのコントロールは、アプリケーション内に基本的な UI 要素を提供し、テキストの表示や操作を簡単に実行できるようにします。 RichTextBoxPasswordBox などのコントロールを使用すると、より高度で特殊なテキスト処理が可能になります。 そして、TextRangeTextSelectionTextPointer などのクラスにより、便利なテキスト操作を実行できます。 これらの UI コントロールには、FontFamilyFontSizeFontStyle などのプロパティがあり、テキストの描画に使用するフォントを制御できます。

ビットマップ効果、変換、テキスト効果の使用

WPF では、ビットマップ効果、変換、テキスト効果などの機能を利用して、人の目をひきつけるテキストを作成できます。 テキストに標準タイプのドロップ シャドウ効果を適用した例を次に示します。

Text shadow with Softness = 0.25

テキストにドロップ シャドウ効果とノイズを適用した例を次に示します。

Text shadow with noise

テキストの外縁にグロー効果を適用した例を次に示します。

Text shadow using an OuterGlowBitmapEffect

テキストにぼかし効果が適用されている例を次に示します。

Text shadow using a BlurBitmapEffect

テキストの 2 行目を x 軸に沿って 150% 拡大し、3 行目を y 軸に沿って 150% 拡大した例を次に示します。

Text scaled using a ScaleTransform

x 軸に沿って傾斜させたテキストの例を次に示します。

Text skewed using a SkewTransform

TextEffect オブジェクトは、テキスト文字列内の 1 つまたは複数の文字列のグループとしてテキストを処理できるヘルパー オブジェクトです。 次の例は、回転する個々の文字を示しています。 各文字は、1 秒間隔で個別に回転します。

Screenshot of text effect rotating text

フロー ドキュメントの使用

一般的な UI コントロールに加えて、WPF には、テキスト表示に使用するレイアウト コントロール (FlowDocument 要素) があります。 FlowDocument 要素を DocumentViewer 要素と組み合わせると、さまざまなレイアウト要件を含む大量のテキストに対応するコントロールを作成できます。 レイアウト コントロールでは、Typography オブジェクトと他の UI コントロールのフォント関連プロパティを通じて、高度なタイポグラフィへのアクセスが提供されます。

検索、ナビゲーション、改ページ位置の自動修正、コンテンツ スケーリングをサポートする FlowDocumentReader でホストされているテキスト コンテンツを次の例に示します。

Screenshot that shows OpenType fonts.

詳細については、「WPF のドキュメント」を参照してください。

軽量テキスト描画

DrawingContext オブジェクトの DrawText メソッドを使用すると、テキストを WPF オブジェクトに直接描画できます。 このメソッドを使用するには、FormattedText オブジェクトを作成します。 このオブジェクトを使用すると、複数行のテキストを描画できます。このテキストでは、テキスト内の各文字を個々に書式設定できます。 FormattedText オブジェクトの機能には、Windows API の DrawText フラグの多くの機能が含まれています。 また、FormattedText オブジェクトは、テキストがその境界を越えたときに省略記号を表示する、省略記号のサポートなどの機能も備えています。 いくつかの書式を適用したテキストを次の例に示します。たとえば、2 番目と 3 番目の単語には線状グラデーションが適用されています。

Text displayed using FormattedText object

書式設定したテキストを Geometry オブジェクトに変換し、人の目をひきつける他の種類のテキストを作成できます。 たとえば、テキスト文字列のアウトラインに基づいて Geometry オブジェクトを作成できます。

Text outline using a linear gradient brush

変換されたテキストのストローク、塗りつぶし、強調表示を変更して、人の目をひく視覚効果を作成するいくつかの方法を次の例に示します。

Text with different colors for fill and stroke

Text with image brush applied to stroke

Text with image brush applied to stroke and highlight

FormattedText オブジェクトの詳細については、「書式設定されたテキストの描画」を参照してください。

テキストの高度な書式設定

テキスト API の最も高度なレベルとして、WPF には、TextFormatter オブジェクトと System.Windows.Media.TextFormatting 名前空間の他の型を使用して、カスタム テキスト レイアウトを作成する機能が用意されています。 TextFormatter と関連クラスを使用して、ユーザー定義による文字形式、段落スタイル、改行ルール、国際対応テキストのその他のレイアウト機能をサポートするカスタム テキスト レイアウトを実装できます。 WPF テキスト レイアウト サポートで既定の実装のオーバーライドが必要となるケースはほとんどありません。 ただし、テキストを編集するコントロールやアプリケーションを作成する場合に、WPF の既定の実装とは異なる実装が必要になることがあります。

従来のテキスト API とは異なり、TextFormatter では、一連のコールバック メソッドにより、テキスト レイアウト クライアントとの対話が行われます。 クライアントでは、TextSource クラスの実装で、これらのメソッドを提供する必要があります。 次の図は、クライアント アプリケーションと TextFormatter の間で行われるテキスト レイアウトの相互作用を示したものです。

Diagram of text layout client and TextFormatter

カスタム テキスト レイアウトの作成の詳細については、「テキストの高度な書式設定」をご覧ください。

関連項目