New Magnification API

Vista に標準で付属する拡大鏡や IntelliMouse 6.10 の拡大鏡を DWM 環境で実行すると,以前とはちょっとちがうぞ,という話.

私も id:Yamaki さんの記事で初めて知りましたが,確かに WPF アプリケーションは拡大鏡の中で「高解像度でレンダリングされたかのように」振る舞っています.なお,DWM オフのときや,Windows XP の拡大鏡をそのまま Vista で実行させたときは,この効果は見られませんでした.
一方,Vista では Magnification API という拡大鏡用の API が追加されています.これのサンプルが "C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\winui\Magnification" にあるので試してみたところ,Vista に標準で付属する拡大鏡同様に,WPF アプリケーションのベクタ的拡大が再現されました.というわけで,恐らくこの新 API の機能なのでしょう.

従来 Windows で拡大鏡というと,Display DC から BitBlt でコピーというパターンが主流でしたが,Vista では API を専用に用意することで MIL レベルのアクセラレーションが利用できるようですね.
Vista Magnification API は,単にデスクトップイメージを拡大するだけでなく,今時の GPU 的な追加機能も多数実装されているようです.

  • 3 次正方行列を登録して,拡大鏡表示イメージを拡大・回転・せん断・平行移動 (回転する拡大鏡が可能に)
  • カラーマトリクスによる色変換 (反転以外のエフェクトも可能に.Virtual Boy 化可能)
  • 表示対象のウィンドウを HWND で制限 (Include または Exclude リスト)
  • GDI 描画ウィンドウを拡大するときにコールバックされる,カスタム拡大フィルタの登録 (どうせシステムメモリ上にあるので,CPU でフィルタリングするのもアリということでしょう)

などが可能なようです.