Почему я вижу пиксели при масштабировании приложения WPF в Windows? - PullRequest
6 голосов
/ 27 ноября 2010

Я разработал графический интерфейс для случайного приложения, использующего WPF.У меня есть куча готовых элементов управления WPF в окне приложения.Я ничего не настраивал, не использовал растровые изображения и т. Д.

При запуске моего приложения и увеличении изображения с помощью приложения «Лупа» в Windows 7 (Win key + Plus key в увеличенном графическом интерфейсе отображаются пиксели. Возможно, я не прав,потому что я не могу объяснить это иначе, но разве WPF не должен обеспечивать вектор, такой как контроль рендеринга?

Спасибо за участие в обсуждении.

Bonus Reading

Ответы [ 4 ]

18 голосов
/ 29 ноября 2010

Назад, когда Vista впервые поставлялась, и когда WPF был в версии 3.0, масштабирование с помощью встроенной лупы фактически выполняло бы векторное масштабирование.

Это перестало работать, когда поставлялся пакет обновления 1 для WPF 3.5.(Он работал в 3.5 до sp1.) Причина, по которой он работал до того, заключается в том, что DWM (менеджер окон рабочего стола) - часть Windows, отвечающая за представление всего, что вы видите на экране - использует MILCORE.DLL для выполнения своего рендеринга.Версии 3.0 и 3.5 WPF также использовали этот же компонент для рендеринга - это означало, что весь контент WPF был, так сказать, нативным.(На самом деле, в Windows XP, у которой нет DWM, WPF - это то, что WPF ставит в вашу систему для собственной выгоды. Но он встроен в Vista и Windows 7.) Когда WPF использовал MILCORE.DLL дляПри рендеринге в Vista любые эффекты, применяемые DWM, такие как масштабирование, также будут применяться так, как вы хотите к WPF - он действительно масштабировался без пикселей.

К сожалению, это уже не так.И причина в том, что WPF начал добавлять новые функции рендеринга.В 3.5 sp1 новой особенностью была поддержка пользовательских пиксельных шейдеров.Чтобы включить это, Microsoft должна была выпустить обновление MIL.(Media Integration Layer - бит, который выполняет фактический рендеринг.) Однако они не были в состоянии обновить MILCORE.DLL, потому что это часть Windows - это то, как все, что вы видите на экране, становится на экране.Выпуск новой версии MILCORE.DLL фактически означает выпуск обновления для Windows.Расписание выпуска для Windows не зависит от расписания для .NET, и поэтому единственный способ, которым команда WPF могла разумно добавить новые функции, - это отправка нового MIL.(Теоретически они могли бы сделать это через Центр обновления Windows, но поскольку WPF теперь принадлежит другому подразделению Microsoft, нежели Windows, на практике такого рода вещи, по-видимому, не происходят.)

По состоянию на.NET 3.5 sp1, MIL находится в другой библиотеке DLL, которая называется wpf_gfx_vXXXX.dll, где vXXXX - номер версии.В .NET 4.0 это wpf_gfx_v0400.dll.

Достоинством является то, что WPF добавляет новые функции рендеринга с каждой новой версией, не требуя обновления самой Windows.Недостатком является то, что рендеринг WPF больше не так тесно интегрирован с Windows, как это было на короткое время назад, когда вышла Vista.И в результате, как вы видели, это увеличение не так весело, как раньше.

3 голосов
/ 27 ноября 2010

Приложение лупы реализует свой собственный рендеринг увеличенного изображения, поэтому вы видите пиксели.WPF использует векторную графику, но в этой ситуации не само приложение WPF выполняет рендеринг увеличенного изображения.

Если вы используете что-то вроде Snoop , вы можете видеть масштабированную и масштабированную векторную графику WPF.рендеринг в действии.

0 голосов
/ 19 декабря 2014

Лупа Windows-7 основана на пикселях, но есть разница в режиме лупы в зависимости от того, активна ли Aero-тема или нет.

  • с темой Арео зум имеет пиксельное увеличение.
  • без темы Арео масштаб сглажен (размыт).

Только с темой Арео можно выбрать другие виды (кроме «Прикрепленные»).

0 голосов
/ 27 ноября 2010

Полагаю, лупа Windows 7 делает снимок экрана реального пользовательского интерфейса приложения, а затем увеличивает его сам (без особого случая для приложений WPF). Конечно, он может получить доступ только к пикселям, а не к векторной графике, которая работает за сценой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...