Graphics.Drawstring se ve bien en el cuadro de imagen, pero horribles en un mapa de bits
-
26-09-2019 - |
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:
FormasUse 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
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: