c# - Graphics.SmoothingMode 的奇怪行为

标签 c# graphics antialiasing

我创建了一个位图并在其上绘制了一个简单的字符串矩形。此外,我将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);
}

这显示了一些意外的行为,因为并非所有图形都已消除锯齿。不知何故,抗锯齿仅限于位于矩形区域中的所有图形。在该区域之外绘制的字符串没有得到抗锯齿,我想知道为什么。这是一个错误吗?我该如何修复它?

enter image description here

最佳答案

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

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

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

enter image description here

关于c# - Graphics.SmoothingMode 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48503933/

相关文章:

Java 多次 repaint() 调用被忽略

c++ - 启用 Direct3D 特定功能(透明 AA)

c++ - OSX 上的 Qt 抗锯齿问题

java - 如何在任意 Java 应用程序中启用抗锯齿功能?

c# - 在业务对象上保存我

c# - 序列化从 WebService 到对象的 XML 响应 (C#)

Java HTML 呈现引擎

graphics - 使用 Mathematica 中的图形以 3D 形式显示多个 2D 绘图?

c# - 将 DataGrid 导出到 CSV 或 Excel

c# - SQLite 与 VS 2010