【C#】Region、Exclude的用法
在 C# 中,Region
和 Exclude
是与图形编程相关的概念,通常在使用 System.Drawing
命名空间进行 GDI+ 绘图时出现。它们主要用于定义和操作二维空间中的区域(几何区域),常用于窗体裁剪、控件重绘、图形绘制优化等场景。
一、Region
的用法
Region
类(位于 System.Drawing
命名空间)表示一个屏幕上的区域,可以是矩形、椭圆、多边形,甚至是复杂组合形状。
1. 创建 Region 的方式:
using System.Drawing;// 1. 从矩形创建
Rectangle rect = new Rectangle(10, 10, 100, 100);
Region region1 = new Region(rect);// 2. 从椭圆创建
GraphicsPath path = new GraphicsPath();
path.AddEllipse(20, 20, 80, 80);
Region region2 = new Region(path);// 3. 从 GraphicsPath 创建复杂形状
GraphicsPath complexPath = new GraphicsPath();
complexPath.AddPolygon(new Point[] {new Point(0, 0),new Point(50, 100),new Point(100, 0)
});
Region region3 = new Region(complexPath);
2. Region 的常用操作
Intersect
:交集Union
:并集Xor
:异或Exclude
:排除(见下文)Complement
:补集GetHrgn
:获取 GDI 句柄(用于 Win32 API)
二、Exclude
的用法
Exclude
是 Region
类的一个方法,用于从当前区域中移除另一个区域,即执行“差集”操作。
方法签名:
public void Exclude(Rectangle rect);
public void Exclude(RectangleF rect);
public void Exclude(Region region);
示例:
// 创建一个大矩形区域
Region bigRegion = new Region(new Rectangle(0, 0, 200, 200));// 创建一个小矩形区域(要排除的部分)
Rectangle hole = new Rectangle(50, 50, 100, 100);// 从小区域中“挖掉”一个洞
bigRegion.Exclude(hole);// 现在 bigRegion 是一个外框为 200x200,中间有 100x100 空洞的区域
实际应用场景:
创建非矩形窗体的透明区域:
这样窗体就变成了一个“框”,中间是透明的(不可点击、不绘制)。
this.Region = new Region(new Rectangle(0, 0, 300, 300));
this.Region.Exclude(new Rectangle(50, 50, 200, 200)); // 中间挖空
绘制时排除某些区域不重绘:
Graphics g = this.CreateGraphics();
Region updateRegion = g.Clip; // 获取当前裁剪区域
updateRegion.Exclude(someControl.Bounds); // 排除某个控件区域
g.Clip = updateRegion;
// 然后只绘制除该控件外的区域
三、注意事项
- Region 是 GDI+ 资源,使用后应释放:
- 在 WinForms 中,
Control.Region
属性可以设置控件的可见/可点击区域。 Exclude
操作是破坏性操作,会修改原 Region 对象,而不是返回新对象。- 对于高性能图形应用,频繁创建/销毁 Region 可能影响性能,需注意优化。
四、总结
概念 | 说明 |
---|---|
Region | 表示一个二维区域,可用于裁剪、绘图、窗体形状控制等 |
Exclude | 从当前 Region 中移除指定区域,实现“差集”效果,常用于“挖洞”或排除绘制区域 |
这些功能在自定义控件、不规则窗体、动画特效等场景中非常有用。
五、扩展
【C#】GraphicsPath的用法文章浏览阅读449次,点赞3次,收藏6次。【C#】GraphicsPath的用法_c# graphicspath 对象说明https://blog.csdn.net/wangnaisheng/article/details/149226810?spm=1011.2415.3001.5331【C#】 使用GDI+获取两个多边形区域相交、非相交区域文章浏览阅读753次。【C#】 使用GDI+获取两个多边形区域相交、非相交区域_c# 图形相交区域
https://blog.csdn.net/wangnaisheng/article/details/140527315?spm=1011.2415.3001.5331