Estoy haciendo algunas pruebas sobre el dibujo de texto .Net y he tenido los siguientes resultados.

Dibujo de texto .NET

Todos los casos se utiliza el valor predeterminado de Windows Vista/7 fuente: Segoe UI, 9

Como se puede ver, hay una diferencia entre la segunda cadena y los otros (que tiene menos calidad, y el anti alias es diferente). He tratado de configurar el anti-alias y el suavizado de modo en la Graphics objeto, sin ningún resultado.

Es posible sacar de texto usign Graphics.DrawString y obtener la misma calidad que otros métodos?

Gracias de antemano.


EDICIÓN: he revisado el código con el Reflector. Me di cuenta de que Graphics.DrawString utiliza gdiplus.dll método de llamada GdipDrawString() y TextRenderer.DrawText utiliza user32.dll llamar DrawTextExW y DrawTextExA.

Cualquier comentario al respecto?

¿utiliza exactamente el mismo tipo de letra en todos los casos ?
Sí, ver a mis ediciones
Usted sólo falta la AntiAlias opción…
Tenido este mismo problema en Windows XP. Tener ClearType activado estaba causando el problema. (Se pierde la «bordes», de modo que el borde de la fuente se convierte en «mosaico». No sé si se puede activar ClearType desactivado en Windows 7.
He usado: // » Sólo anti-alias funciona cuando el usuario habilitado clara-tipo. g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit

OriginalEl autor Daniel Peñalba | 2011-09-01

4 Comentarios

  1. 14

    GDI+ de Microsoft fue el primer intento en la resolución de representación independiente de texto. Y la única manera de procesar el texto .NET 1.x. Consiguió ampliamente criticado por sus problemas de calidad, inspirador de la introducción de TextRenderer y Aplicación.SetCompatibleTextRenderingDefault ().NET 2.0. Se utiliza GDI para dibujar texto, resolución efectiva de los problemas. Sólo debe utilizar Gráficos.DrawString() en alta resolución de los dispositivos. Las impresoras.

    Por lo que vale, el segundo intento fue WPF y también tiene un montón de críticas por aproximada de texto problemas. Resuelto en .NET 4.

    Tratar este formulario de ejemplo para ver uno de los peores problemas:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        protected override void OnPaint(PaintEventArgs e) {
            e.Graphics.DrawString("Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii", 
                this.Font, Brushes.Black, 0, 0);
        }
    }

    OriginalEl autor Hans Passant

  2. 11

    De código siguiente se trata de un ejemplo en MSDN:

    var fontFamily = new FontFamily("Times New Roman");
    var font = new Font(fontFamily, 32, FontStyle.Regular, GraphicsUnit.Pixel);
    var solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
    
    e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
    e.Graphics.DrawString("Your Text Here", font, solidBrush, new PointF(10, 60));

    He probado y funcionó bien, una suave texto fue dibujado en mi formulario! 😉 Aquí está el enlace a la artículo.

    Lo siento, pero esta respuesta no es correcta. Por favor, intente reproducir el ejemplo mediante un sistema de etiquetas con el mismo tipo de letra y el color, y usted verá que el texto no es exactamente dibujado. -1.
    Ok, no es una diferencia MENOR, pero si se usa «TextRenderingHint.AntiAliasGridFit», la calidad es igual. Hice mi ejemplo con una Etiqueta para comprobar los resultados! 🙂
    Bueno, a mí me funcionó. Muchísimas gracias! 🙂

    OriginalEl autor Abbas

  3. 1

    La Graphics.DrawString método reside en la Sistema.Dibujo espacio de nombres, lo que significa que se utiliza GDI+ de debajo de las mantas en lugar de GDI, que es lo que el TextRenderer.DrawText método que se está usando.

    Se ve como la causa específica de la diferencia en este caso es el anti-aliasing. Usted puede controlar el anti-aliasing a través de la Gráficos.TextRenderingHint propiedad.

    graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;

    Creo que también se puede desactivar en cada una de las fuentes, utilizando el método que se muestra por Abbas.

    Juega con TextRenderingHint, probado todas las posibilidades y ningún resultado favorable.

    OriginalEl autor Justin

  4. 1

    Aparte de las otras sugerencias, que son probablemente más correcto en su caso, también se podría tratar de usar un Octree basado en la cuantificación de la imagen.
    Yo lo uso para fotos normales, no del texto.
    Hay un artículo de Microsoft que habla en detalles acerca de este y tiene un proyecto de ejemplo:
    http://msdn.microsoft.com/en-us/library/aa479306.aspx

    OriginalEl autor Durden81

Dejar respuesta

Please enter your comment!
Please enter your name here