C# 将矩形的路径转换为图形路径/区域

C# 将矩形的路径转换为图形路径/区域,c#,region,graphicspath,C#,Region,Graphicspath,我正在学习GraphicsPath和Region。并将其与一起使用,使其无效 所以,我有一个矩形对象,我想删除这个矩形。但是,我只想擦除矩形的边(即线) 目前,我有以下几点: if(bErase) { Rectangle rcRubberBand = GetSelectionRectangle(); GraphicsPath path = new GraphicsPath(); path.AddRectangle(rcLastRubberBand); Regio

我正在学习
GraphicsPath
Region
。并将其与
一起使用,使其无效

所以,我有一个
矩形
对象,我想删除这个矩形。但是,我只想擦除矩形的边(即线)

目前,我有以下几点:

if(bErase)
{
    Rectangle rcRubberBand = GetSelectionRectangle();

    GraphicsPath path = new GraphicsPath();
    path.AddRectangle(rcLastRubberBand);
    Region reg = new Region(path);
    myControl3.Invalidate(reg);
    myControl3.Update();
}

它可以工作,但会使整个矩形无效。我只需要使我绘制的矩形线无效。我可以用
GraphicsPath
创建这样一个路径吗?

除了一个完整的矩形,系统不能使任何东西无效

因此,不能使用大纲路径来节省时间

然而,它可以用于其他事情。让我们看两个选项:

  • 您可以创建一个轮廓路径
  • 可以排除区域的某些部分
创建轮廓
图形的最简单方法是用
加宽给定路径:

GraphicsPath gp = new GraphicsPath();
gp.AddRectangle(r0);
using (Pen pen = new Pen(Color.Green, 3f)) gp.Widen(pen); 
这样,您就可以使用
画笔的所有许多选项,包括
dashstyle
对齐
线条连接

另一种方法是使用默认的
FillMode.Alternate
创建它,只需添加一个较小的图形:

Rectangle r0 = new Rectangle(11, 11, 333, 333);
Rectangle r1 = r0;
r1.Inflate(-6, -6);
GraphicsPath gp = new GraphicsPath();
gp.AddRectangle(r0);
gp.AddRectangle(r1);
现在您可以填充路径了

g.FillPath(Brushes.Red, gp);
或者使用它来剪裁
图形
对象的
剪贴簿

g.SetClip(gp);
在此之后,您绘制的任何内容(包括
Clear
)只会影响轮廓内的像素

完成后,您可以写:

g.ResetClip();
并继续绘制图形目标的全尺寸

或者,您可以使用路径作为
区域的基础

Region r = new Region(gp);
并将
控件
限制为它

somecontrol.Region = r;
区域
支持多个设置操作,因此,您也可以使用相同的结果编写此操作,而不是使用上述大纲路径:

Region r = new Region(r0);
r.Exclude(r1);

是的,但这不会有帮助,因为系统仍然只会使边界矩形无效。@太遗憾了。好吧,那么我必须继续寻找。假设你想节省更新时间。如果只想限制图形区域,可以从区域中排除内部矩形,并使用生成的轮廓来设置剪切矩形。@TaW听起来不错。这是如何实现的?一定要看看最新的答案:加宽对于某些情况来说也是一个不错的选择!谢谢我明天去调查!