在 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
?