Lo que estoy haciendo es obtener el tamaño de píxel de una cadena y convertirla en centésimas de pulgada (es decir, píxeles/DPI = pulgadas, pulgadas * 100 = centésimas de pulgada). Aquí está mi código:¿Por qué TextRenderer.MeasureText no mide el texto correctamente utilizando fuentes más grandes en C#?
private static SizeF TextSize(string text, Font txtFnt)
{
SizeF txtSize = new SizeF();
// The size returned is 'Size(int width, int height)' where width and height
// are the dimensions of the string in pixels
Size s = System.Windows.Forms.TextRenderer.MeasureText(text, txtFnt);
// Value based on normal DPI settings of 96
txtSize.Width = (float)Math.Ceiling((float)s.Width/96f * 100f);
txtSize.Height = (float)Math.Ceiling((float)s.Height/96f * 100f);
return txtSize;
}
Ahora, con tipo de letra Arial todo esto funciona bien para las fuentes más pequeño que 12, pero después de que los personajes comienzan a conseguir cortados debido a que el tamaño calculado es más pequeño que el tamaño real. Yo sé que mi configuración de DPI se han fijado en 96. Mis fuentes son definidos de la misma con la variación en el tamaño de la fuente:
Font myFont = new Font("Arial", <font size>, FontStyle.Regular, GraphicsUnit.Point);
creo que tengo que usar GraphicsUnit.Point
debido al control personalizado Estoy dibujando las cuerdas a, pero importa el GraphicsUnit
?
¿Funciona correctamente la función MeasureText
, o hay algo más?
EDITAR
Estoy dibujando a un control de vista previa de impresión personalizada. Las unidades en el control de vista previa de impresión son 'Inches/100' (de ahí la conversión). Creo que el texto, las imágenes, etc. se dibujan con el objeto de gráficos de la impresora, pero no estoy del todo seguro.
He tenido problemas con esta función, así que tengo curiosidad de ver lo que dice la gente. –