2014-03-26 72 views
0

我需要用DrawString方法繪製Graphics類的字符串。但圖像有一些黑色像素,而不是確切的顏色。我怎樣才能清楚畫出來?如何清楚地使用DrawString?

Sample string

public Image Ciz() 
    { 
     Color renk = Color.FromArgb(255, 133, 199); 
     Bitmap result = new Bitmap(KutuBoyutu.Genislik, KutuBoyutu.Yukseklik); 
     result.SetResolution(100, 100); 
     Graphics g = Graphics.FromImage(result); 
     g.SmoothingMode = SmoothingMode.HighQuality; 
     Brush drawBrush = new SolidBrush(renk); 
     StringFormat stringFormat = new StringFormat(); 
     stringFormat.Alignment = StringAlignment.Center; 
     stringFormat.LineAlignment = StringAlignment.Center; 
     Rectangle rect1 = new Rectangle(0, 0, result.Width, result.Height); 
     Font font = new Font("Arial", 15f, FontStyle.Bold, GraphicsUnit.Pixel); 
     g.DrawString(Yazi, font, drawBrush, rect1, stringFormat); 
     drawBrush.Dispose(); 
     return result; 
    } 

回答

1

添加

g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 

你的代碼。

TextRenderingHint.AntiAliasGridFit也適用。

+1

它已經是反鋸齒。這是問題:) –

+0

@HansPassant你的意思是已經消除鋸齒?您設置的SmoothingMode是用於線條,圓形等繪圖,而不是用於文本。 –

3

繪圖文本需要一個明確定義的背景,以便抗鋸齒效果可以正常工作。你沒有,你忘了初始化位圖。它的像素默認爲黑色,alpha爲0.

所以文本渲染器會嘗試將字母混淆成黑色背景。你看,那些幾乎是黑色的像素現在變成非常可能在白色背景下顯示。只有在黑色背景上繪製位圖時,它纔會看起來不錯。修復:

using (Graphics g = Graphics.FromImage(result)) { 
    g.Clear(Color.White); 
    // etc... 
} 

如果您無法修復背景顏色,那麼您需要放棄抗鋸齒。將TextRenderingHint設置爲SingleBitPerPixelGridFit。你不會喜歡它:)