如何清楚地使用DrawString?

时间:2014-03-26 14:15:56

标签: c# image system.drawing

我需要使用DrawString方法在Graphics类中绘制一个字符串。但是图像有一些黑色像素,而不是确切的颜色。我怎样才能清楚地画出来?

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;
    }

2 个答案:

答案 0 :(得分:3)

绘图文本需要明确定义的背景,以便抗锯齿效果可以正常工作。你没有,你忘了初始化位图。其像素为默认值,黑色,alpha为0。

因此文本渲染器会尝试将该字母别名混合为黑色背景。你看,那些几乎是黑色的像素现在在白色背景下变得非常可见。如果您在黑色背景上绘制位图,它只会看起来很好。修正:

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

如果无法修复背景颜色,则需要放弃抗锯齿。将TextRenderingHint设置为SingleBitPerPixelGridFit。你不会喜欢它:))

答案 1 :(得分:1)

添加

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

代码。

TextRenderingHint.AntiAliasGridFit也适用。