图形区域的 C# 填充工具

问题描述

过去几天,我一直在尝试为图形区域实现一个简单的填充工具。我目前正在处理的场景:

Picture1

它具有相同的区域,但分为两个子区域。

这就是问题开始的地方。我获取区域扫描并遍历它们以区分属于一个子区域的矩形和属于另一个子区域的矩形。这很有效,但当然,这是一个近似值,当我完成填充过程时,我会得到这样的结果:

Picture2

如您所见,仍然存在前一个区域的颜色信息,因此我需要一个更稳健的近似值来去除那些意外像素。 有谁知道我如何改进这种方法以将一个区域准确地分割成多个子区域?

先谢谢你!

代码

List<Region> regionSplits = new List<Region>(); 
RectangleF[] rectanglesReg = regSelected.GetRegionScans(new Matrix()); 
foreach (var rect in rectanglesReg.OrderBy(item => (item.Y)))
{
     if (regionSplits.Count == 0)
         regionSplits.Add(new Region(rect));
     else
     {
         bool added = false;
         foreach (var reg in regionSplits)
         {
              RectangleF rectExpanded = new RectangleF(rect.X - 2,rect.Y - 2,rect.Width + 4,rect.Height + 4);
              if (reg.IsVisible(rectExpanded))
              {
                   reg.Union(rect);
                   added = true;
              }
         }
         if (!added)
             regionSplits.Add(new Region(rect));
     } 
}

总而言之,当我谈论填充区域时,我指的是我需要添加到我的应用程序中的功能,该功能的行为有点像洪水填充工具。我的意思是,如果用户单击图形区域,则该区域必须将其类别从例如黄色更改为蓝色。因此,在我发布的示例图片中,当我单击左侧的黄色区域时,我需要将其类别更改为另一种颜色。在内部,我必须将两个黄色区域视为唯一区域的一部分,因此我需要找到一种算法将其一分为二(我提供的代码是我目前正在使用的代码)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)