Windows Presentation Foundation の文字体裁

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

このトピックには次のセクションが含まれています。

  • テキストの品質およびパフォーマンスの向上
  • 多彩な文字体裁
  • 各国対応テキストのサポートの強化
  • フォントのサポートの強化
  • 新しいテキスト API (アプリケーション プログラミング インターフェイス)
  • リソース
  • 関連トピック

テキストの品質およびパフォーマンスの向上

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

ClearType の y 方向アンチエイリアシングを適用したテキスト

Text with ClearType y-direction anti-aliasing

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

パイプ ラインをレンダリングするテキスト図

Diagram of the text rendering pipeline

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

多彩な文字体裁

OpenType フォント形式は、TrueType® フォント形式の拡張です。OpenType フォント形式は、Microsoft と Adobe が共同で開発したもので、高度な文字体裁機能を豊富に備えています。Typography オブジェクトは、スタイル上の代替文字や巻きひげ文字など、OpenType フォントの高度な機能の多くを公開します。Windows SDK には、Pericles フォントや Pescadero フォントなど、優れた機能が充実した OpenType フォント サンプルが用意されています。詳細については、「OpenType フォント パックのサンプル」を参照してください。

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

OpenType 代替スタイル グリフを使用するテキスト

Text using OpenType stylistic alternate glyphs

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

OpenType 標準グリフおよび巻き髭グリフを使用するテキスト

Text using OpenType standard and swash glyphs

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

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

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

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

  • 各国対応テキストの幅広いサポート。詳細については、「Windows Presentation Foundation のグローバリゼーション」を参照してください。

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

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

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

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

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

  • FontFamily を定義するための個別の FontWeightFontStretch、および FontStyle 型。これにより 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% 拡大した例を次に示します。

ScaleTransform を使用したテキスト

Text scaled using a ScaleTransform

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

SkewTransform を使用したテキスト

Text skewed using a SkewTransform

TextEffect オブジェクトは、テキスト文字列にまとめられた 1 つ以上の文字のグループとしてテキストを処理できるヘルパ オブジェクトです。次の例は TextEffectSample から取り上げたもので、回転する個々の文字を示しています。各文字は、1 秒間隔で個別に回転します。

回転するテキスト効果アニメーションの例

Screenshot of text effect rotating text

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

一般的な UI コントロールに加え、WPF には、テキスト表示に使用するレイアウト コントロール (FlowDocument 要素) があります。FlowDocument 要素を DocumentViewer 要素と組み合わせると、さまざまなレイアウト要件を持つ大量のテキストに対応するコントロールを作成できます。レイアウト コントロールは、Typography オブジェクト、および他の UI コントロールのフォント関連プロパティを通じて、高度な文字体裁機能へのアクセスを実現します。

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

FlowDocumentReader でホストされるテキスト

Using OpenType fonts sample screen shot

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

軽量テキスト描画

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

FormattedText オブジェクトを使用して表示したテキスト

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

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

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

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

従来のテキスト API とは異なり、TextFormatter は一連のコールバック メソッドを使用して、テキスト レイアウト クライアントと対話します。このテキスト フォーマッタを使用するには、クライアントが TextSource クラスの実装にこれらのメソッドを提供している必要があります。クライアント アプリケーションと TextFormatter 間のテキスト レイアウトに関する対話を次の図に示します。

アプリケーションと TextFormatter 間の対話

Diagram of text layout client and TextFormatter

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

リソース

XamlPad を使用してさまざまな文字体裁プロパティを使用するマークアップを作成してみると、OpenType の機能を学習するうえで役立ちます。詳細については、「XAMLPad」を参照してください。

XamlPad を使用した OpenType フォントのテスト

XamlPad displaying OpenType features

参照

関連項目

FormattedText
TextFormatter

概念

ClearType の概要
OpenType フォントの機能
書式設定されたテキストの描画
テキストの高度な書式設定

その他の技術情報

XAMLPad
Microsoft の文字体裁