2010-08-05 18 views
4

J'essaie d'utiliser DrawString pour écrire du texte comme une image, puis le faire pivoter de 90 degrés. Cela fonctionne bien avec un bitmap ou directement sur un PictureBox, mais la grande différence est dans la qualité. Le texte dessiné PictureBox a une grande qualité et a l'air bien. Quand je dessine sur une image, il semble horrible et bloc. J'ai fait quelques changements pour essayer de le rendre plus beau, mais il ne semble pas aussi beau qu'il le devrait.Graphics.Drawstring est belle dans PictureBox mais horrible dans un bitmap

Exemple de code:

Utilisez un projet Windows Forms et placez 2 boîtes d'image sur et un bouton et l'exécuter avec le code suivant pour voir ce que je veux dire:

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 

Répondre

4

Ces changements semblent faites-en l'air agréable ....

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

Oui, la TextRenderingHint est celui qui compte. –

+0

Ity exigeait que les 3 propriétés soient définies. TextRenderingHint = ClearTypeGridFit seul wasn; t assez pour obtenir le rendu de texte de haute qualité que je cherchais. – Dan