Windows Presentation Foundation の文字体裁

更新 : 2007 年 11 月

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

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

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

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

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

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

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

パイプ ラインをレンダリングするテキスト図
パイプラインを描画するテキストのダイアグラム

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

多彩な文字体裁

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

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

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

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

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

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

ドロップ シャドウが適用されたテキスト
ぼかし = 0.25 のテキスト シャドウ

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

ドロップ シャドウとノイズが適用されたテキスト
ノイズを含むテキスト シャドウ

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

外縁にグロー効果が適用されたテキスト
OuterGlowBitmapEffect を使用するテキスト シャドウ

テキストにぼかし効果を適用した例を次に示します。

ぼかし効果が適用されたテキスト
BlurBitmapEffect を使用するテキスト シャドウ

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

ScaleTransform を使用したテキスト
ScaleTransform を使用してスケールされたテキスト

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

SkewTransform を使用したテキスト
SkewTransform を使用して傾斜させたテキスト

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

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

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

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

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

FlowDocumentReader でホストされるテキスト
OpenType フォント サンプルの使用のスクリーン ショット

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

軽量テキスト描画

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

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

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

線形グラデーション ブラシを使用したテキスト アウトライン
線形グラデーション ブラシを使用するテキスト アウトライン

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

ストロークおよび塗りつぶしを別々の色に設定した例
塗りつぶしとストロークに別の色を使用するテキストストロークに適用したイメージ ブラシの例
ストロークに適用されるイメージ ブラシを含むテキストストロークおよび強調表示に適用したイメージ ブラシの例
ストロークに適用されるイメージ ブラシを含むテキスト

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

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

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

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

アプリケーションと TextFormatter 間の対話
テキスト レイアウト クライアントと TextFormatter のダイアグラム

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

リソース

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

XamlPad を使用した OpenType フォントのテスト
OpenType 機能を表示する XamlPad

参照

概念

ClearType の概要

OpenType フォントの機能

書式設定されたテキストの描画

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

パフォーマンスの最適化 : テキスト

XAMLPad

参照

FormattedText

TextFormatter

その他の技術情報

Microsoft Typography