我需要使用DrawString方法在Graphics类中绘制一个字符串。但是图像有一些黑色像素,而不是确切的颜色。我怎样才能清楚地画出来?
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;
}
答案 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
也适用。