2010-08-05 37 views
4

我試圖用DrawString將文本寫入圖像,然後將其旋轉90度。它可以與位圖或直接在PictureBox上正常工作,但質量差別很大。 PictureBox文字畫質很好,看起來不錯。當我在圖像上繪製它時,它看起來很可怕和塊狀。我做了一些修改,試圖讓它看起來更好,但它看起來並不像應該那麼好。Graphics.Drawstring在PictureBox中看起來不錯,但在位圖中很糟糕

示例代碼:

使用Windows窗體項目,並在其上放置和按鈕2個圖片框,並用下面的代碼運行它,看看我的意思是:

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 

回答

4

這些變化似乎使它看起來不錯....

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

是的, TextRenderingHint是重要的。 – 2010-08-05 20:33:15

+0

Ity要求設置所有3個屬性。 TextRenderingHint = ClearTypeGridFit本身不足以獲得我期待的高質量文本渲染。 – Dan 2010-08-09 15:36:41

相關問題