winforms 在c#中正确填充/转换多边形

wtlkbnrh  于 2023-03-09  发布在  C#
关注(0)|答案(1)|浏览(235)

我标记了以下多边形:

我需要正确地填充多边形的内部。
使用以下代码:

using (SolidBrush br = new SolidBrush(Color.FromArgb(100, Color.Yellow)))
{
   e.Graphics.FillPolygon(br, points);
}

其中points等于System.Drawing.Point[] points = new System.Drawing.Point[total_points_size];
上面的points数组将包含多个点,分别为X,Y。您可以在图像中看到蓝色省略号。
以下是有关的坐标:

我得到如下结果:

我只需要多边形从内部填充,看起来像由于某种原因,标记是去(0,0)的每一个点,我们如何才能解决这个问题?
我已经了解到解决方案可能涉及图形转换与偏移,但我无法找出确切的解决方案。

wmtdaxz3

wmtdaxz31#

下面是绘制多边形的等效代码,我用Net7和NET4.7.2测试过。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Paint += Form1_Paint;
    }

    private static readonly Point[] points = new[]
    {
        new Point(62, 478),
        new Point(333, 411),
        new Point(411, 392),
        new Point(650, 454),
        new Point(784, 467),
        new Point(1105, 529),
        new Point(1136, 574),
        new Point(1182, 580),
        new Point(1247, 689),
        new Point(24, 693),
    };

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        using (Graphics g = this.CreateGraphics())
        using (SolidBrush br = new SolidBrush(Color.FromArgb(100, Color.Yellow)))
        {
            g.FillPolygon(br, points);
        }
    }

}

这是图形结果。

相关问题