WPF 4 Graphics

先日、PDC09のクライアント系のセッションを見直してみて、自分が参加したかったけどできなかったセッションを見てみました。その一つが「Mastering WPF Graphics and Beyond」です。

新機能

  • 完全に新しいテキスト レンダリング スタック

WPFではアンチエイリアシングがデフォルトで行われるので、テキストがぼけることが多いのですが、WPF 4ではアンチエイリアシングをしないアタッチプロパティとして、以下のような列挙子が追加されます。

System.Windows.Media{
  enum TextFormattingMode {Ideal, Display};
  enum TextRenderingMode {Auto, Aliased, Grayscale, ClearType};
  enum TextHintingMode {Auto, FixedText, AnimatedText};
}

  • レイアウト丸め(Layout Rounding)

WPFでは(GDIと違って)理想的なレイアウトをするので、スクリーンのグリッドとアラインメントをとりませんでした。すると以下のようになり(小文字の「l」に注意)、同じ文字が違って見えてしまいます。

image

WPF 4ではスクリーングリッドとのアラインメントをとるオプションが使えるようになり、GDIと互換性を持たせることができます。以下の図で小文字の「l」がすべて同じように見えます。

image

プロパティとして、UIElement.UseLayoutRounding=”True”を使います。WPFではデフォルトがオフですが、Silverlightではデフォルトがオンですので注意してください。

  • ClearTypeHing – Clear Type on IRTs
  • アニメーション イージング関数
  • ピクセル シェーダー 3.0 サポート
  • キャッシュ合成

ベクトルデータの描画が重くてアニメーションや描画の性能を落とすことがあります。そういう時に、ベクトルデータを画像としてキャッシュして再利用できるプロパティ IElement.CacheMode ができました。こんなふうに使います、この例では4倍までの拡大でも使えるビットマップキャッシュを生成します。

<Rectangle>
   <Rectangle.CacheMode>
    <BitmapCache RenderAtScale="4"/>
   </Rectangle.CacheMode>
</Rectangle>

  • VisualScrollableAreaClip

その他

  • 高速なデフォルト画像再サンプリング
  • レガシー BitmapEffect の削除
  • 固定機能レンダリングの削除