除了完整的矩形之外,您无法让系统使任何内容无效。
所以你不能使用大纲路径来节省时间。
但是,它可能对其他事情有用。让我们看两个选项:
创建轮廓的最简单方法GraphicsPath
是使用加宽给定路径Pen
:
GraphicsPath gp = new GraphicsPath();
gp.AddRectangle(r0);
using (Pen pen = new Pen(Color.Green, 3f)) gp.Widen(pen);
这让您可以使用 a 的所有许多选项Pen
,包括DashStyles
,Alignment
等LineJoins
。
另一种方法是使用默认值创建它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);
ClipBounds
或使用它来剪辑 Graphics
对象g
:
g.SetClip(gp);
在此之后,您绘制的任何内容(包括 a Clear
)都只会影响轮廓内的像素。
完成后,您可以编写:
g.ResetClip();
并继续在图形目标的全尺寸上绘图。
或者,您可以使用路径作为 a 的基础Region
:
Region r = new Region(gp);
并限制Control
它..:
somecontrol.Region = r;
Regions
支持多个集合操作,因此您也可以使用相同的结果编写它,而不是使用上面的大纲路径:
Region r = new Region(r0);
r.Exclude(r1);