Почему я вижу пиксели при увеличении приложения WPF в Windows?

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

  •  28-09-2019
  •  | 
  •  

Вопрос

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

При запуске моего приложения и увеличения приложения увеличителя в Windows 7 (Win key + Plus key, увеличенный графический интерфейс показывает пиксели. Я, вероятно, ошибаюсь, потому что я не могу объяснить его в противном случае, но не должен предоставлять WPF вектор вроде Контроль рендеринга?

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

Бонус чтения

Это было полезно?

Решение

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

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

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

С помощью .NET 3.5 SP1 MIL находится в другой DLL под названием wpf_gfx_vxxxx.dll, где vxxxx - это номер версии. В .NET 4.0, это wpf_gfx_v0400.dll.

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

Другие советы

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

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

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

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

  • С темой Арео зум пикселируется.
  • Без темы арео зум сглажен (размыты).

Только с темой Aso другие взгляды (кроме «пристыкованных») выбираются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top