2010-11-27 10 views
6

He desarrollado una GUI para una aplicación aleatoria usando WPF. Tengo un montón de controles WPF listos para usar en la ventana de la aplicación. No he personalizado nada, no usé mapas de bits, etc.¿Por qué veo píxeles al aplicar el zoom a la aplicación WPF en Windows?

Al ejecutar mi aplicación y hacer zoom utilizando la aplicación Magnifier en Windows 7 (Win key + Plus key, la GUI ampliada muestra píxeles. Probablemente esté equivocado, porque puedo ' t explicarlo de otro modo, pero no se supone WPF para proporcionar vectorial como prestación control?

Gracias por participar en la discusión.

Respuesta

17

Atrás, cuando se lanzó Vista por primera vez, y cuando WPF estaba en la versión 3.0, el zoom con la lupa incorporada realmente haría escalas basadas en vectores.

Esto dejó de funcionar cuando se envió el paquete de servicio WPF 3.5 1. (Funcionó en 3.5 antes de sp1). La razón por la que funcionó antes de eso es que DWM (Desktop Window Manager), la parte de Windows responsable de presentar todo lo que ves en la pantalla, usa MILCORE.DLL para hacer su renderizado. La versión 3.0 y 3.5 de WPF también usaba este mismo componente para representar, esto significaba que todo el contenido de WPF era contenido nativo, por así decirlo. (De hecho, en Windows XP, que no tiene DWM, MILCORE.DLL es algo que WPF pone en su sistema para su propio beneficio. Pero está integrado en Vista y Windows 7.) Cuando WPF estaba usando MILCORE.DLL para renderizar en Vista, cualquier efecto aplicado por el DWM, como escalar, también se aplicaría de la forma que desee a WPF; realmente se escaló sin pixelar.

Lamentablemente, este ya no es el caso. Y la razón es que WPF comenzó a agregar nuevas características de renderizado. En 3.5 sp1, la nueva característica en cuestión fue el soporte para sombreadores de píxeles personalizados. Para habilitar eso, Microsoft tuvo que lanzar una actualización a la MIL. (La Capa de Integración de Medios - el bit que hace el renderizado real.) Sin embargo, no estaban realmente en posición de actualizar MILCORE.DLL, porque eso es parte de Windows, es como todo lo que ves en pantalla llega a estar en la pantalla. Liberar una nueva versión de MILCORE.DLL significa de manera efectiva enviar una actualización a Windows. El calendario de lanzamientos para Windows es independiente del de .NET, por lo que la única forma en que el equipo de WPF podría agregar nuevas características era enviar una nueva MIL. (En teoría, podrían haberlo hecho a través de Windows Update, pero dado que WPF ahora es propiedad de una división diferente de Microsoft que Windows, ese tipo de cosas no parece suceder en la práctica).

A partir de .NET 3.5 sp1, la MIL está en una DLL diferente llamada wpf_gfx_vXXXX.dll donde vXXXX es el número de versión. En .NET 4.0, es wpf_gfx_v0400.dll.

La ventaja es que WPF puede agregar nuevas características de representación con cada nueva versión, sin necesidad de que Windows se actualice. La desventaja es que el procesamiento de WPF ya no está tan bien integrado con Windows como lo fue brevemente cuando Vista se envió. Y el resultado es que, como has visto, esa ampliación no es tan divertida como solía ser.

+1

Guau, ¡una respuesta tan completa! ¡Bien hecho y gracias por la aclaración! – Boris

+1

¡Una respuesta muy completa, +1! Y qué vergüenza, esa fue una característica increíble y pensé que estábamos a sólo 5 minutos de poder cambiar el zoom por separado para cada ventana en el nivel del sistema operativo y sin la falta de definición ... bueno, uno puede soñar. –

+0

En realidad, llegué aquí de uno de los videos de Pluralsight del Sr. Griffiths en el que demostró la lupa en Vista, y vi que no funcionaba para mí en Windows 10, solo para encontrar una actualización del mismo Ian en StackOverflow. ¡Qué bien! –

3

la aplicación lupa implementa su propia representación de imagen con zoom, así que por eso está viendo píxeles. WPF usa gráficos vectoriales, pero en esta situación no es la aplicación WPF lo que es renderizando la imagen ampliada.

Si utiliza algo como Snoop, puede ver la representación de gráficos vectoriales WPF ampliada y ampliada en acción.

+0

Gracias por su respuesta. ¿Está de acuerdo con que es un poco tonto por parte de Microsoft desarrollar una aplicación Magnifier de esa manera, mientras promociona y empuja su propio paradigma de renderización de UI (WPF) y se jacta de que Windows Vista y Windows 7 UI se desarrollan utilizando el mismo ¿al mismo tiempo? – Boris

+0

@ Boris Desafortunadamente, la aplicación de la lupa no puede manejar WPF especialmente. Ciertamente parece factible dado que Snoop hace algo similar, aunque solo hace zoom en una sola aplicación. Sin embargo, diría que WPF se usa mínimamente en las UI de Windows Vista y Windows 7 OS. –

+0

@chibacity Qué tan correcto eres. Bueno, personalmente, creo que es una pena. Creo que WPF es genial y sé cómo Microsoft es tedioso con sus políticas internas; por lo tanto, simplemente no tiene sentido para mí no abrazar algo bastante progresivo como WPF. – Boris

0

Supongo que la lupa de Windows 7 toma una instantánea de la interfaz de usuario en pantalla de la aplicación real y luego la magnifica (no es un caso especial para las aplicaciones de WPF). Por supuesto, lo que puede acceder es solo los píxeles, no los gráficos vectoriales que funcionan detrás de la escena.

+0

Entendido, gracias. – Boris

+0

¡De nada! – Vlad

-1

El Windows-7-Magnifier está basado en píxeles, pero hay una diferencia en el modo de lupa en función de si un tema Aero está activo o no.

  • con el tema Areo el zoom está pixelado.
  • sin tema Areo, el zoom está suavizado (borroso).

Solo con el tema Areo se pueden seleccionar otras Vistas (excepto "Acoplado").

Cuestiones relacionadas