Graphics.SmoothingMode 的奇怪行为

Odd behaviour of Graphics.SmoothingMode

我创建了一个 Bitmap 并在其上绘制了一个简单的 stringRectangle。此外,我将 graphicsSmoothingMode 设置为 AntiAlias

orgBitmap = new Bitmap(250, 250);

using (Graphics graphics = Graphics.FromImage(orgBitmap))
{
    graphics.SmoothingMode = SmoothingMode.AntiAlias;

    Rectangle rect = new Rectangle(30, 30, 150, 200);
    graphics.FillRectangle(Brushes.Red, rect);

    using (Pen pen = new Pen(Color.Green, 5))
    {
        graphics.DrawRectangle(pen, rect);
    }

    graphics.DrawString("Test Test Test Test", new Font("Arial", 20, FontStyle.Regular), Brushes.Black, 35, 35);
}

这显示了一些意外行为,因为并非所有图形都经过抗锯齿处理。不知何故,抗锯齿仅限于位于 Rectangles 区域的所有图形。在该区域外绘制的 string 没有抗锯齿,我想知道为什么。这是一个错误还是我该如何修复它?

发生这种情况是因为您在尚未初始化的区域上绘制文本 - 因此没有用于抗锯齿的背景颜色 - 它会将其视为透明(尽管背景确实显示为白色,因为您可以看到)。

您可以通过在绘制其余部分之前立即调用 graphics.Clear(Color.White); 轻松解决此问题。

然后出来抗锯齿,像这样: