【C#】 使用GDI+获取两个多边形区域相交、非相交区域

33 篇文章 2 订阅

一、使用GDI+获取两个多边形区域相交、非相交区域

在 C# 中使用 GDI+(Graphics Device Interface Plus)处理图形时,你可以使用 System.DrawingSystem.Drawing.Drawing2D 命名空间中的类来操作区域(Region)。下面是一个示例,说明如何创建两个多边形区域,计算它们的相交和非相交部分,并对这些部分进行填充。

首先,确保你有以下引用:

using System.Drawing;
using System.Drawing.Drawing2D;

接下来,可以编写如下代码:

public void DrawPolygonIntersections(Graphics g)
{
    // 创建两个多边形
    Point[] polygon1 = new Point[]
    {
        new Point(50, 50),
        new Point(100, 50),
        new Point(100, 100),
        new Point(50, 100)
    };

    Point[] polygon2 = new Point[]
    {
        new Point(75, 75),
        new Point(125, 75),
        new Point(125, 125),
        new Point(75, 125)
    };

    // 创建 Region 对象
    Region region1 = new Region(polygon1);
    Region region2 = new Region(polygon2);

    // 计算相交区域
    Region intersectRegion = new Region();
    intersectRegion.Intersect(region1, region2);

    // 计算非相交区域(差集)
    Region nonIntersectRegion1 = new Region();
    nonIntersectRegion1.Exclude(intersectRegion);
    nonIntersectRegion1.Union(region1);

    Region nonIntersectRegion2 = new Region();
    nonIntersectRegion2.Exclude(intersectRegion);
    nonIntersectRegion2.Union(region2);

    // 创建画刷
    SolidBrush brush1 = new SolidBrush(Color.Red);
    SolidBrush brush2 = new SolidBrush(Color.Blue);
    SolidBrush brush3 = new SolidBrush(Color.Green);

    // 填充相交区域
    g.FillRegion(brush3, intersectRegion);

    // 填充非相交区域
    g.FillRegion(brush1, nonIntersectRegion1);
    g.FillRegion(brush2, nonIntersectRegion2);

    // 清理
    region1.Dispose();
    region2.Dispose();
    intersectRegion.Dispose();
    nonIntersectRegion1.Dispose();
    nonIntersectRegion2.Dispose();
    brush1.Dispose();
    brush2.Dispose();
    brush3.Dispose();
}

这个函数首先定义了两个多边形并创建了对应的 Region 对象。然后,它创建了一个新的 Region 来存储相交部分,通过调用 Intersect 方法。接着,它计算了非相交区域,即两个原始区域减去相交区域。最后,使用不同颜色的画刷填充这些区域。

注意,不要忘记在函数结束时释放所有创建的资源。这包括 RegionSolidBrush 对象,因为它们实现了 IDisposable 接口,需要显式调用 Dispose 方法来释放与之关联的非托管资源。

 

二、使用GDI+获取两个多边形区域相交、非相交区域的所有坐标集合

2.1使用GDI+获取两个多边形区域相交区域的所有坐标集合

属于是多边形可能存在交叉及互相重叠部分,参考如下链接:

【C#】在一个给定的宽、高范围内,获取到该多边形内部的所有坐标集合?-CSDN博客文章浏览阅读304次,点赞2次,收藏3次。【C#】在一个给定的宽、高范围内,获取到该多边形内部的所有坐标集合?https://blog.csdn.net/wangnaisheng/article/details/140513467

2.2使用GDI+获取两个多边形区域非相交区域的所有坐标集合

 根据2.1修改即可。

 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnaisheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值