2010-08-23 7 views
8

Estoy tratando de entender la discrepancia entre los tamaños de fuente que los usuarios seleccionan o especifican (por ejemplo, usando FontDialog) y el tamaño em reportado por la clase Font en .NET.¿Discrepancia de tamaño de fuente en .NET GDI +?

Por ejemplo:

using (FontDialog dlg = new FontDialog()) { 
    if (dlg.ShowDialog() == DialogResult.OK) { 
     Console.WriteLine("Selected font size: " + dlg.Font.SizeInPoints.ToString("0.##")); 
    } 
} 

Usando el código anterior, obtendrá unos resultados confusos:

Selección 11 en el cuadro de diálogo produce 11,25

Selección 12 en el cuadro de diálogo produce 12

Seleccionar 14 en el cuadro de diálogo produce 14.25

Seleccionar 16 en el cuadro de diálogo produce 15.75

Este comportamiento se produce independientemente de la fuente que elija. Como puede ver desde arriba, no hay un patrón en la discrepancia, parece variar aleatoriamente entre +0.25 y -0.25.

Me muevo por esto en las interfaces de usuario solo mostrando el tamaño de la fuente como un número entero redondeado, pero juro que he visto paquetes de procesamiento de texto/DTP que permiten a los usuarios seleccionar tamaños de fuente fraccionarios, y estos paquetes no muestra el comportamiento anterior al interactuar con cuadros de diálogo de fuente de Windows.

¿Alguien puede proporcionar una explicación racional para esto? ¿Existe una técnica de mejores prácticas para mostrar el tamaño de fuente en una UI? ¿Qué tal si el usuario quiere un tamaño fraccionario como '10 .5 '?

Respuesta

1

no existe un patrón en la discrepancia

Como se puede ver, los tamaños de fuente suceda en incrementos de 0,75.

Editar: Puede ajustar los tamaños si no utiliza el cuadro de diálogo de fuente, pero los resultados que sospecho serán menos agradables que los tamaños 'preferidos'.

+1

Así que, esencialmente, los tamaños integrales en los cuadros de diálogo comunes son (y siempre han sido) valores aproximados ? ¿Soy el único que encuentra esto un poco desconcertante? :/ Obviamente no tiene sentido ofrecer a mis usuarios tamaños de fuente fraccionarios, ya que ya existe un elemento de imprecisión en las convenciones establecidas ... –

+0

@Bradley Smith: Por lo que entiendo, sí. Pero esto podría ser diferente si ejecuta su monitor en una configuración diferente de DPI. Te sugiero que juegues con él, sin obtener respuestas, pregúntaselo a los mismísimos MS. – leppie

12

Considere estas cositas:

  • una pulgada, como resultado del embargo estas cosas se deciden en la historia, contiene 72 puntos.
  • Por lo general, las personas ejecutan Windows en una resolución lógica de de 96 puntos por pulgada.
  • Hmm, bien, tenemos puntos, pulgadas y puntos, tres unidades para tratar aquí.
  • GDI quiere saber cuántos puntos dibujar, y el usuario está seleccionando puntos.
  • Finalmente, la proporción de 72 puntos por pulgada/96 puntos por pulgada = 0.75 puntos por punto.

¡Ese 0.75 es desafortunado! Significa que si permitimos que el usuario elija puntos hacia arriba, entonces la representación ideal se basará solo en una parte de un punto lógico. Sería bueno si pudiéramos ajustar la representación completa hacia arriba o hacia abajo al punto lógico completo más cercano.

¿Listo? ¡Aquí vamos!


  • 11:
    • 11 puntos/72 puntos por pulgada = 0,153 pulgadas * 96 puntos por pulgada = 14.667 puntos, BARF!
    • Vamos a redondear hasta 15 puntos,
    • SO entonces 15 puntos/96 puntos por pulgada * 72 puntos por pulgada = 11.25 puntos.

  • 12:
    • 12/72 * 96 = 16 puntos.
    • Puedo vivir con eso, no es necesario nada de fudge.

  • 16:
    • 16/72 * 96 = 21,3333, BARF!
    • Redondeemos a 21 puntos/96 * 72 = 15.75, mucho mejor.

se entiende la idea.

Recuerde que estos números cambiarán si el usuario cambia su resolución lógica (96 ppp, 120 ppp, etc.)

Cuestiones relacionadas