wpf fonts

WPF Blurry fonts issue- Solutions



(10)

Experiencia técnica

Hay un artículo en profundidad sobre el procesamiento de texto WPF de uno de los administradores de programas de texto de WPF en windowsclient.net: Text Clarity en WPF .

El problema se reduce a WPF que necesita un generador de fuentes de escalado lineal para animaciones fluidas. Pure ClearType por otro lado toma bastante libertad con la fuente para empujar tallos verticales en el siguiente píxel.

La diferencia es obvia si se compara el patrón clásico de "cascada". WinForms en el lado inferior izquierdo, WPF en el lado superior derecho:

Aunque tampoco soy partidario de la idiosincrasia de representación de fuentes de WPF, puedo imaginarme el clamor si las animaciones saltarían como lo hacen en la cascada de Winforms.

Jugando con el registro

De especial interés para mí fue el enlace al artículo de MSDN " ClearType Registry Settings ", que explica los posibles ajustes del lado del usuario en el registro:

  • Nivel ClearType: cantidad de sugerencias subpíxel
  • Nivel gamma
  • Estructura de píxeles: cómo se organizan las franjas de color en un píxel de visualización
  • Nivel de contraste de texto: ajusta el ancho de los tallos del glifo para hacer que la fuente sea más pesada

Jugar con estos ajustes en realidad no mejoró el problema subyacente, pero puede ayudar al reducir el efecto de sangrado del color para los usuarios sensibles.

Otro enfoque

El mejor consejo que dio el artículo de Text Clarity fue aumentar el tamaño de fuente y cambiar la fuente. Calibri me funciona mejor que la interfaz de usuario estándar de Segoe. Debido a su popularidad como fuente web, probé también Verdana, pero tiene un salto desagradable en peso entre 14 y 15 puntos, que es muy visible cuando se anima el tamaño de la fuente.

WPF 4.0

WPF 4 tendrá un mejor soporte para influir en la prestación de las fuentes. Hay un artículo en el blog de texto de WPF explicando los cambios. Más prominentemente, ahora hay (al menos) tres tipos diferentes de representación de texto:

<grumble> Eso debería ser suficiente cuerda para cada diseñador. </ grumble>

El problema se describe y demuestra en los siguientes enlaces:

Explicación: Text Clarity en WPF . Este enlace tiene una comparación de fuente.

Me gustaría recopilar todas las soluciones posibles para este problema. Microsoft Expression Blend usa WPF pero las fuentes parecen legibles.

  • Fondo oscuro como en Microsoft Expression Blend
  • Aumentar el tamaño de fuente y cambiar la fuente (Calibri ...) [link]
  • Incrustar formularios de Windows [link]
  • Utilice GDI + y / o la clase TextRenderer de Windows Forms para representar texto en un mapa de bits y luego renderice ese mapa de bits como control WPF. [link]

¿Hay más soluciones?

Esto se va a solucionar en VS2010 (y WPF4) beta 2

Mejoras en la pila de texto de WPF 4.0

¡PARECE QUE HA SIDO RESUELTO FINALMENTE!

ComputerZen.com de Scott Hanselman: WPF y Blurriness de texto, ahora con claridad completa
Blog de texto WPF: Mejoras adicionales de claridad de texto de WPF


.NET 4 finalmente tiene una solución para la pobre calidad de reproducción de texto de WPF, pero está bien escondida. Establezca lo siguiente para cada ventana:

TextOptions.TextFormattingMode="Display"

El valor predeterminado es "Ideal", que no es en absoluto lo que el nombre implica.

Hay otras dos opciones en TextOptions, concretamente TextHintingMode y TextRenderingMode, pero ambas tienen valores predeterminados razonables.


Acabo de probar VS2010 beta, que está todo hecho en WPF, y sufre MALDE el problema de fuente borrosa. Particularmente en la información sobre herramientas.

Eso parece dar alguna evidencia de que WPF4 de hecho no resolverá el problema (si algo parece peor)


Desde el punto de vista de un desarrollador, la única "solución" conocida hasta la fecha es usar GDI + y / o la clase TextRenderer de Windows Forms para renderizar texto en un mapa de bits, y luego renderizar ese mapa de bits como control WPF. Aparte de las implicaciones obvias de rendimiento, esto no alivia el problema para las aplicaciones existentes.

Ahora he creado un ticket de Microsoft Connect para este problema (para mi sorpresa, a pesar de toda la negatividad, no había un informe de error real en el rastreador designado).

Dado que ese es uno de los canales oficiales de comunicación de solicitudes y preguntas a Microsoft, también le aconsejaría que lo revise para obtener una respuesta más rápida. Al menos, si desea que el problema se trate de una manera u otra, votar allí y / o validar el problema ayudará a llamar la atención de los ingenieros de administración de servidores y los ingenieros de Microsoft sobre este problema, y ​​posiblemente elevará su prioridad percibida.


Dicen que funciona "SnapToDevicePixels = true", pero nunca he visto ningún buen resultado.

Combato el texto borroso cambiando a una fuente diferente.

Obviamente, esta no es una solución al problema, sin embargo, así es como lo he solucionado.


El otro día tuve un problema cuando utilicé un borde que tenía un efecto DropShadowEffect aplicado. El resultado fue que todo el texto dentro de ese borde era extremadamente borroso. No importa si el texto estaba dentro de otros paneles o directamente debajo del borde: cualquier bloque de texto que sea hijo de uno de los padres que tenga aplicado un Effect parece verse afectado.

La solución a este caso particular fue no poner cosas dentro del borde que tengan efectos, sino usar una grilla (o cualquier otra cosa que permita poner el contenido una encima de la otra) y colocar un rectángulo en la misma celda que el texto (es decir, como un hermano en el árbol visual) y poner los efectos sobre eso.

Al igual que:

<!-- don''t do this ---> <Border> <Border.Effect> <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/> </Border.Effect> <TextBlock Text="This Text Will Be Blurry" /> </Border> <!-- Do this instead --> <Grid> <Rectangle> <Rectangle.Effect> <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/> </Rectangle.Effect> </Rectangle> <TextBlock Text="This Text Will Be Crisp and Clear" /> </Grid>


Esto se va a solucionar en VS2010 (y WPF4) beta 2:


No lo veo como un error, pero la configuración predeterminada es muy molesta. Aquí hay una comparación de todas las combinaciones de

TextOptions.TextRenderingMode TextOptions.TextFormattingMode RenderOptions.ClearTypeHint

SnapToDevicePixels no hace ninguna diferencia en la representación de texto.

Yo prefiero:

TextOptions.TextRenderingMode="Auto" TextOptions.TextFormattingMode="Ideal" RenderOptions.ClearTypeHint="Auto"

donde las líneas verticales nunca son borrosas.

La fuente utilizada es Open Sans Light, que puede ser muy bonita si se usa bien, como en el último TeamViewer.

Para aquellos que usan Mahapps.Metro, el problema es el TransitioningContentControl https://github.com/MahApps/MahApps.Metro/issues/889


SnapToDevicePixels solo se aplica a las formas de WPF (líneas, etc.), no al procesador de texto.

No se conoce una solución alternativa a este problema. Según Microsoft, el comportamiento es "por diseño".

También vea this hilo en los foros de Microsoft discutiendo los problemas: ha recibido algunas respuestas de los chicos de MS que aclaran su posición sobre el tema.


Wow, no puedo creer que finalmente obtuve mis fuentes WPF legibles. Y tampoco puedo creer que no haya un diálogo de opción para facilitar estos cambios, mientras que los valores predeterminados son horribles en mi pantalla.

Estas configuraciones de registro (en decimal) me funcionaron y se acercan a mi fuente de tipo de letra normal:

  • ClearTypeLevel: 10 (principalmente alias de escala de grises)
  • GammaLevel: 1300 (gamma superior hizo que la fuente fuera demasiado delgada y estaba viendo los colores en el aliasing)