WindowsでWPFアプリケーションをズームするときにピクセルが表示されるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/4292015

  •  28-09-2019
  •  | 
  •  

質問

WPFを使用してランダムアプリケーション用のGUIを開発しました。アプリケーションウィンドウに配置されたボックス外のWPFコントロールがたくさんあります。何もカスタマイズしておらず、ビットマップなどを使用しませんでした。

Windows 7でマグニファイアアプリケーションを使用してアプリケーションを実行し、ズームするとき(Win key + Plus key, 、拡大されたGUIにピクセルが表示されています。おそらく間違っています。 ベクトルのような コントロールレンダリング?

議論に参加してくれてありがとう。

ボーナスリーディング

役に立ちましたか?

解決

Vistaが最初に出荷され、WPFがバージョン3.0になったときに戻ってきたとき、組み込みの拡大鏡でズームすると、実際にベクトルベースのスケーリングが行われます。

これは、WPF 3.5サービスパック1が出荷されたときに機能しなくなりました。 (SP1の前に3.5で機能しました。)それが以前に機能した理由は、DWM(デスクトップウィンドウマネージャー) - 画面に表示されるすべてを提示する責任のあるWindowsの部分であるMilcore.dllを使用してレンダリングを行います。 WPFのバージョン3.0と3.5も同じコンポーネントを使用してレンダリングしました。これは、すべてのWPFコンテンツがいわばネイティブコンテンツであることを意味します。 (実際、DWMを備えていないWindows XPでは、Milcore.dllはWPFが独自の利益のためにシステムに置くものです。しかし、WPFがMilcore.dllを使用していたときに、VistaとWindows 7に組み込まれています。 Vistaにレンダリングすると、スケーリングなどのDWMが適用する効果は、WPFを必要とする方法でも適用されます。実際にはピクセル化せずにスケーリングしました。

残念ながら、これはもはやそうではありません。その理由は、WPFが新しいレンダリング機能の追加を開始したためです。 3.5 SP1では、問題の新機能はカスタムピクセルシェーダーのサポートでした。それを有効にするために、MicrosoftはMILの更新をリリースする必要がありました。 (メディア統合レイヤー - 実際のレンダリングを行うビット。)しかし、それらは実際にMilcore.dllを更新する立場にありませんでした。それはWindowsの一部であるためです - それは画面上で見るものがすべて画面に表示される方法です。 Milcore.dllの新しいバージョンをリリースすることは、効果的にWindowsの更新を押し出すことを意味します。 Windowsのリリーススケジュールは.NETのリリーススケジュールとは独立しているため、WPFチームが新しい機能を合理的に追加できる唯一の方法は、新しいMILを出荷することでした。 (理論的には、Windowsの更新を介してそれを実行できたかもしれませんが、WPFはWindowsとは異なるMicrosoftの分割が所有しているため、実際にはそのようなことは起こらないようです。)

.NET 3.5 SP1の時点で、MILはwpf_gfx_vxxx.dllと呼ばれる異なるdllにあり、vxxxxはバージョン番号です。 .net 4.0では、wpf_gfx_v0400.dllです。

利点は、WPFがWindows自体を更新する必要なく、新しいバージョンごとに新しいレンダリング機能を追加できることです。マイナス面は、WPFのレンダリングが、Vistaが出荷されたときに一時的に戻ったほど、Windowsと密接に統合されなくなったことです。そして、あなたが見たように、あなたが見たように、拡大は以前ほど楽しいことではないということです。

他のヒント

拡大器アプリケーションは、独自のズームされた画像レンダリングを実装しているため、ピクセルが表示されます。 WPFはベクトルグラフィックスを使用しますが、この状況では、ズームされた画像をレンダリングしているのはWPFアプリケーション自体ではありません。

のようなものを使用する場合 詮索 Zoomed and Scaled WPF Vectorグラフィックスレンダリングが動作しているのを見ることができます。

Windows 7 Magnifierは、画面上のUIで実際のアプリケーションのスナップショットを取得し、それ自体を拡大すると思います(WPFアプリケーションに特別なケースを作成しません)。もちろん、アクセスできるのはピクセルだけでなく、舞台裏で動作するベクトルグラフィックスではありません。

Windows-7-Magnifierはピクセルベースですが、エアロテームがアクティブかどうかに応じて、拡大鏡モードに違いがあります。

  • areoテーマでは、ズームはピクセル化されています。
  • areoテーマがなければ、ズームは滑らかになります(ぼやけ)。

AREOテーマのみが他のビュー(「ドッキング」を除く)が選択可能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top