Graphics.SmoothingMode 的奇怪行为

L. *_*rdt 2 c# graphics antialiasing

我创建了一个Bitmap并在其上绘制了一个简单的stringRectangle。此外,我graphics设置SmoothingModeAntiAlias

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);
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

Mat*_*son 5

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

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

然后它会消除锯齿,如下所示:

在此输入图像描述