当前位置: 首页 > news >正文

【C#】Region、Exclude的用法

在 C# 中,RegionExclude 是与图形编程相关的概念,通常在使用 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 的用法

ExcludeRegion 类的一个方法,用于从当前区域中移除另一个区域,即执行“差集”操作。

方法签名:

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

 

http://www.dtcms.com/a/331318.html

相关文章:

  • 无需公钥的无损加密解密
  • 深入详解C语言数组:承上启下——从C语言数组基础到数据结构衔接
  • 码上爬第八题【协程+ob混淆】
  • 【Java虚拟机】JVM相关面试题
  • 2025天府杯数学建模C题
  • 2025天府杯数学建模A题分析
  • 智能门锁:安全与便捷的现代家居入口
  • 第1节 从函数到神经网络:AI思路的逆袭之路
  • Mybatis学习笔记(八)
  • VS2022 C++生成和调用DLL动态链接库
  • 小杰python高级(six day)——pandas库
  • 自由学习记录(84)
  • nnDetection在windows系统下使用教程
  • 4.Ansible部署文件到主机
  • Torch -- 卷积学习day2 -- 卷积扩展、数据集、模型
  • Linux软件编程(四)多任务与多进程管理
  • 机械硬盘模块逻辑与工作原理
  • 某处卖600的【独角仙】尾盘十分钟短线 尾盘短线思路 手机电脑通用无未来函数
  • uniapp对接极光消息推送
  • 【CLR via C#(第3版)阅读笔记】类型基础
  • [特殊字符]走进华为,解锁商业传奇密码
  • K8s学习----Namespace:资源隔离与环境管理的核心机制
  • 渲染 opentype 多个字符的文本,并设置文本的渲染开始位置
  • Warm-Flow 1.8.0 重大更新
  • Lua 脚本在 Redis 中的应用
  • vivo Pulsar 万亿级消息处理实践(4)-Ansible运维部署
  • 河南萌新联赛2025第(五)场:信息工程大学补题
  • 飞书文档定时自动同步至百炼知识库
  • ESP32 I2S音频总线学习笔记(六):DIY蓝牙音箱教程
  • CVPR 2025 | 北大团队SLAM3R:单目RGB长视频实时重建,精度效率双杀!