Problema de fuentes borrosas de WPF: soluciones

Resuelto Robert Vuković asked hace 16 años • 12 respuestas

El problema se describe y demuestra en los siguientes enlaces:

  • Paul Stovell WPF: Representación de texto borroso
  • Foro www.gamedev.net
  • Microsoft Connect: el procesador de texto WPF produce texto muy borroso en tamaños de fuente pequeños

Explicación: Claridad del texto en WPF . Este enlace tiene comparación de fuentes.

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...) [enlace]
  • Incrustar formularios de Windows [enlace]
  • Utilice la clase TextRenderer de GDI+ y/o Windows Forms para representar texto en un mapa de bits y luego representar ese mapa de bits como un control WPF. [enlace]

¿Hay más soluciones?

Esto se solucionará en VS2010 (y WPF4) beta 2

¡PARECE QUE FINALMENTE SE HA SOLUCIONADO!

ComputerZen.com de Scott Hanselman: WPF y desenfoque del texto, ahora con total claridad

Robert Vuković avatar Oct 10 '08 13:10 Robert Vuković
Aceptado

.NET 4 finalmente tiene una solución para la mala calidad de representación de texto de WPF, pero está bien oculta. Configure lo siguiente para cada ventana:

TextOptions.TextFormattingMode="Display"

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

Hay otras dos opciones en TextOptions, a saber, TextHintingMode y TextRenderingMode, pero ambas tienen valores predeterminados sensatos.

Helge Klein avatar Mar 02 '2011 11:03 Helge Klein

Experiencia técnica

Hay un artículo detallado sobre la representación de texto WPF de uno de los administradores de programas de texto WPF en windowsclient.net: Text Clarity in WPF .

El problema se reduce a que WPF necesita un renderizador de fuentes de escala lineal para lograr animaciones fluidas. Pure ClearType, por otro lado, requiere bastante libertad con la fuente para empujar los tallos verticales hacia el siguiente píxel.

La diferencia es obvia si se compara el patrón clásico de "cascada". WinForms en la parte inferior izquierda, WPF en la parte superior derecha:


(fuente: black.co.at )

Si bien tampoco soy fanático de las idiosincrasias de representación de fuentes de WPF, puedo imaginar el clamor si las animaciones saltaran 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 " Configuración del Registro ClearType ", que explica los posibles ajustes del lado del usuario en el registro:

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

Jugar con estas configuraciones realmente no mejoró el problema subyacente, pero puede ayudar a reducir el efecto de decoloración del color para usuarios sensibles.

Otro enfoque

El mejor consejo que dio el artículo 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, también probé Verdana, pero tiene un salto desagradable en el peso entre 14 puntos y 15 puntos, que es muy visible al animar el tamaño de fuente.

WPF 4.0

WPF 4 tendrá soporte mejorado para influir en la representación de fuentes. Hay un artículo en el blog de texto de WPF que explica los cambios. Lo más destacado es que ahora existen (al menos) tres tipos diferentes de representación de texto:

comparación de representación de texto
(fuente: windows.net )

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

David Schmitt avatar Oct 10 '2008 08:10 David Schmitt

El otro día encontré un problema cuando usé un borde al que se le había aplicado DropShadowEffect . El resultado fue que todo el texto dentro de ese borde estaba extremadamente borroso. No importa si el texto estaba dentro de otros paneles o directamente debajo del borde: cualquier bloque de texto que sea hijo del padre y que tenga un efecto aplicado parece verse afectado.

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

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>
Isak Savo avatar Oct 27 '2009 15:10 Isak Savo