Graphics.SmoothingMode 的奇怪行为
Odd behaviour of Graphics.SmoothingMode
我创建了一个 Bitmap
并在其上绘制了一个简单的 string
和 Rectangle
。此外,我将 graphics
的 SmoothingMode
设置为 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);
轻松解决此问题。
然后出来抗锯齿,像这样:
我创建了一个 Bitmap
并在其上绘制了一个简单的 string
和 Rectangle
。此外,我将 graphics
的 SmoothingMode
设置为 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);
轻松解决此问题。
然后出来抗锯齿,像这样: