2010-11-27 3 views
6

WPF를 사용하는 임의의 응용 프로그램 용 GUI를 개발했습니다. WPF 컨트롤 상자가 응용 프로그램 창에 놓여 있습니다. 아무 것도 사용자 지정하지 않았으며 비트 맵을 사용하지 않았습니다.Windows에서 WPF 응용 프로그램을 확대/축소 할 때 왜 픽셀이 표시됩니까?

Windows 7에서 돋보기 응용 프로그램 (Win key + Plus key)을 사용하여 응용 프로그램 및 확대/축소를 실행하는 경우 확대 된 GUI에 픽셀이 표시됩니다. t, 그렇지 않으면 그것을 설명하지만, WPF 벡터 같은 제어 렌더링을 제공하기로되어 있지?

감사 토론에 참여.

답변

17

Vista가 처음 출시되었을 때 WPF가 버전 3.0에있을 때 내장 된 돋보기로 확대/축소하면 실제로 벡터 기반 확장이 수행됩니다.

WPF 3.5 서비스 팩 1이 제공되면 작동이 중지됩니다. (sp1 이전에는 3.5에서 작동했습니다.) 그 전에 작업 한 이유는 DWM (Desktop Window Manager) - 화면에 표시된 모든 것을 표시하는 Windows의 일부 - MILCORE.DLL을 사용하여 렌더링을 수행한다는 것입니다. WPF의 버전 3.0과 3.5도이 동일한 구성 요소를 사용하여 렌더링했습니다. 즉, 모든 WPF 내용이 원래의 내용이었습니다. (사실, DWM이없는 Windows XP에서 MILCORE.DLL은 WPF가 자신의 이익을 위해 시스템에 넣는 것이지만 Vista와 Windows 7에 내장되어 있습니다.) WPF가 MILCORE.DLL을 사용하여 비스타에서 렌더링 할 때, 스케일링과 같은 DWM에 의해 적용된 모든 효과는 WPF에서 원하는 방식으로 적용됩니다. 실제로 픽셀 화하지 않고 스케일을 적용했습니다.

불행히도 이것은 더 이상 적용되지 않습니다. 그 이유는 WPF가 새로운 렌더링 기능을 추가하기 시작했기 때문입니다. 3.5 SP1에서는이 새로운 기능이 맞춤형 픽셀 쉐이더를 지원했습니다. 이를 가능하게하려면 Microsoft는 MIL에 대한 업데이트를 릴리스해야했습니다. (미디어 통합 레이어 - 실제 렌더링을 수행하는 비트입니다.) 그러나 MILCORE.DLL은 Windows의 일부이기 때문에 실제로 업데이트 할 수있는 위치에 있지 않았습니다. 화면에 표시되는 모든 내용이 화면에 표시되는 방식입니다. MILCORE.DLL의 새 버전을 발표하는 것은 Windows에 대한 업데이트를 효과적으로 푸시하는 것을 의미합니다. Windows의 릴리스 일정은 .NET의 릴리스 일정과는 독립적이므로 WPF 팀이 새로운 기능을 합리적으로 추가 할 수있는 유일한 방법은 새 MIL을 제공하는 것입니다. (이론적으로 그들은 Windows Update를 통해이 작업을 수행 할 수 있었지만 WPF는 현재 Windows와는 다른 Microsoft 부서에서 소유하고 있기 때문에 이러한 종류의 문제는 실제로 발생하지는 않습니다.)

sp1에서 MIL은 wpf_gfx_vXXXX.dll이라는 다른 DLL에 있습니다. 여기서 vXXXX는 버전 번호입니다. .NET 4.0에서는 wpf_gfx_v0400.dll입니다.

위의 단점은 WPF가 Windows 자체를 업데이트 할 필요없이 새로운 버전마다 새로운 렌더링 기능을 추가한다는 점입니다. 단점은 Vista가 출하 될 때 WPF의 렌더링이 더 이상 Windows와 긴밀하게 통합되지 않는다는 것입니다. 그리고 당신이 보았던 것처럼, 결과는 예전만큼이나 재미 있지 않습니다.

+1

와우, 그런 완전한 대답! 잘 했어 그리고 설명을 해줘서 고마워! – Boris

+1

매우 철저한 대답입니다. +1! 그리고 놀라운 점은 놀랄만 한 기능이었고 OS 레벨의 각 창에 대해 개별적으로 줌을 변경할 수있는 것으로부터 불과 5 분 밖에 안된다고 생각했습니다. 흐림없이 ... 오, 꿈을 꿀 수 있습니다. –

+0

실제로 그리피스 씨의 Pluralsight 비디오에서 비스타의 돋보기를 시연 해 보았습니다. Windows 10에서 나에게 도움이되지 않는다는 것을 알았습니다. 단지 StackOverflow에서 Ian 자신이 업데이트 한 것을 발견했습니다. –

3

돋보기 응용 프로그램이 자체의 확대 된 이미지 렌더링을 구현, 당신이 그 이유가 그래서 픽셀을 볼 때 WPF는 벡터 그래픽을 사용하지만이 상황에서는 WPF 응용 프로그램이 아닙니다. 확대/축소 된 이미지를 렌더링합니다.

Snoop과 같은 것을 사용하면 확대/축소 된 WPF 벡터 그래픽 렌더링이 작동하는 것을 볼 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 새로운 UI 렌더링 패러다임 (WPF)을 홍보하고 추진하면서 Windows Vista 및 Windows 7 UI가 자랑스러워하는 방식으로 돋보기 응용 프로그램을 개발하는 것은 Microsoft 측에서 약간 어리 석다는 것에 동의하십니까? 동시에? – Boris

+0

@Boris 돋보기 응용 프로그램이 WPF를 특별히 처리 할 수 ​​없다는 것은 불행한 일입니다. Snoop이 단일 응용 프로그램 만 확대하더라도 유사한 기능을 수행한다는 점을 감안하면 확실히 실현 가능합니다. WPF는 Windows Vista 및 Windows 7 OS의 UI에서 최소한으로 사용됩니다. –

+0

@chibacity 당신이 옳다. 글쎄, 개인적으로 나는 수치 스럽다고 생각한다. 저는 WPF가 훌륭하다고 생각하며 Microsoft가 자체 정책을 지루하게 여긴다는 것을 알고 있습니다. 따라서 WPF처럼 진보적 인 것을 받아들이지 않는 것이 제게 의미가 없습니다. – Boris

0

Windows 7 돋보기는 실제 응용 프로그램 화면 UI의 스냅 샷을 찍은 다음 WPF 응용 프로그램을위한 특별한 경우가 아닌 그 자체를 확대합니다. 물론 그것이 액세스 할 수있는 것은 단지 픽셀 일 뿐이며 장면 뒤에서 작동하는 벡터 그래픽이 아닙니다.

+0

알겠습니다. 고마워요. – Boris

+0

여러분을 환영합니다! – Vlad

-1

Windows-7-Magnifier는 픽셀 기반이지만 Aero 테마가 활성화되어 있는지 여부에 따라 돋보기 모드가 달라집니다.

  • Areo 테마는 줌이 픽셀 화되어 있습니다.
  • Areo 테마를 사용하지 않으면 확대/축소가 부드럽게 (흐릿하게)됩니다.

Areo 테마에서만 다른보기 ("도킹 됨"제외)를 선택할 수 있습니다.