为标签绘制抗锯齿椭圆区域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为标签绘制抗锯齿椭圆区域相关的知识,希望对你有一定的参考价值。

我为标签绘制了一个类似椭圆的区域,但我不知道如何设置它的抗锯齿。

片段:

Rectangle circle = new Rectangle(0, 0, labelVoto.Width,labelVoto.Height);
var path = new GraphicsPath();
path.AddEllipse(circle);
labelVoto.Region = new Region(path);

这就是结果:

enter image description here

有谁能够帮我?

答案

设置SmoothingMode对象的Graphics。覆盖OnPaintBackground而不是改变Region。区域不支持抗锯齿。此示例通过从Label派生自定义标签来创建。

public class EllipticLabel : Label
{
    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // This ensures that the corners of the label will have the same color as the
        // container control or form. They would be black otherwise.
        e.Graphics.Clear(Parent.BackColor);

        // This does the trick
        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

        var rect = ClientRectangle;
        rect.Width--;
        rect.Height--;
        using (var brush = new SolidBrush(BackColor)) {
            e.Graphics.FillEllipse(brush, rect);
        }
    }
}

如果将绘制矩形大小设置为ClientRectangle。椭圆将被右边和底部的一个像素剪裁。因此我将其大小减小了一个像素。

您可以通过在代码或属性窗口中设置标签的BackColor属性来设置椭圆的所需背景颜色。

结果:

enter image description here

编译完代码后,自定义标签会自动显示在当前项目的Toolbox中。

以上是关于为标签绘制抗锯齿椭圆区域的主要内容,如果未能解决你的问题,请参考以下文章

绘制剪切图像时可以进行抗锯齿处理吗?

透明位图上的抗锯齿文本

为 WPF 形状启用抗锯齿

在 OpenCV 中使用 CV_AA 标志绘制一条线不会产生抗锯齿线

在 iOS 中,如何在没有抗锯齿/插值的情况下绘制位图?

画布中的抗锯齿大文本