Pregunta

Estoy tratando de utilizar DrawString al texto de escritura como una imagen y luego girarlo 90 grados. Funciona bien tanto con un mapa de bits o directamente en un cuadro de imagen, pero la gran diferencia está en la calidad. El texto elaborado PictureBox tiene gran calidad y apariencia agradable. Cuando lo dibujo en una imagen que se ve horrible y bloques. He hecho algunos cambios para tratar de conseguir que se vea mejor, pero no se ve tan bonito como debería.

Código de ejemplo:

Formas

Use un lugar de Windows proyectan y 2 cuadros de imagen en él y un botón y ejecutarlo con el siguiente código para ver lo que quiero decir:

Public Class Form1
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       Dim g As System.Drawing.Graphics
       g = PictureBox1.CreateGraphics

       ' x.DrawRectangle(New Pen(Brushes.White, 200), New Rectangle(0, 0, 200, 200))
       g.TranslateTransform(10.0F, 0.0F)
       g.RotateTransform(90)
       g.DrawString("MM Components", New Font("Arial", 7, FontStyle.Regular), Brushes.DarkBlue, New PointF(0, 0))

       Dim g2 As System.Drawing.Graphics
       Dim img As New Bitmap(300, 300, Drawing.Imaging.PixelFormat.Format24bppRgb)
       g2 = Graphics.FromImage(img)

       g2.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
       g2.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
       g2.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
       ' img.SetResolution(150, 150)

       ' x.DrawRectangle(New Pen(Brushes.White, 200), New Rectangle(0, 0, 200, 200))
       g2.TranslateTransform(10.0F, 0.0F)
       g2.RotateTransform(90)
       g2.FillRectangle(Brushes.White, 0, 0, 300, 300)
       g2.DrawString("MM Components", New Font("Arial", 7, FontStyle.Regular), Brushes.DarkBlue, New PointF(0, 0))
       PictureBox2.Image = img

      'System.Threading.Thread.Sleep(20)
   End Sub
End Class
¿Fue útil?

Solución

Estos cambios parecen que se vea bonito ....

    g2.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
    g2.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
    g2.CompositingQuality = Drawing2D.CompositingQuality.HighQuality

Otros consejos

La diferencia aquí es, como usted señaló, ClearType.

Leer esto para una explicación más detallada de lo que es y cómo funciona: http://msdn.microsoft.com/en-us /library/dd183433(VS.85).aspx

También otro informe del mismo tema en los foros de MSDN, la solución incluye:

http: / /social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/9a66c7a2-79ad-4c9b-91cc-361ec72d13de

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top