C#中Region、Exclude的用法小結(jié)
在 C# 中,Region 和 Exclude 是與圖形編程相關(guān)的概念,通常在使用 System.Drawing 命名空間進(jìn)行 GDI+ 繪圖時(shí)出現(xiàn)。它們主要用于定義和操作二維空間中的區(qū)域(幾何區(qū)域),常用于窗體裁剪、控件重繪、圖形繪制優(yōu)化等場(chǎng)景。
一、Region的用法
Region 類(位于 System.Drawing 命名空間)表示一個(gè)屏幕上的區(qū)域,可以是矩形、橢圓、多邊形,甚至是復(fù)雜組合形狀。
1. 創(chuàng)建 Region 的方式:
using System.Drawing;
// 1. 從矩形創(chuàng)建
Rectangle rect = new Rectangle(10, 10, 100, 100);
Region region1 = new Region(rect);
// 2. 從橢圓創(chuàng)建
GraphicsPath path = new GraphicsPath();
path.AddEllipse(20, 20, 80, 80);
Region region2 = new Region(path);
// 3. 從 GraphicsPath 創(chuàng)建復(fù)雜形狀
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:補(bǔ)集GetHrgn:獲取 GDI 句柄(用于 Win32 API)
二、Exclude的用法
Exclude 是 Region 類的一個(gè)方法,用于從當(dāng)前區(qū)域中移除另一個(gè)區(qū)域,即執(zhí)行“差集”操作。
方法簽名:
public void Exclude(Rectangle rect); public void Exclude(RectangleF rect); public void Exclude(Region region);
示例:
// 創(chuàng)建一個(gè)大矩形區(qū)域 Region bigRegion = new Region(new Rectangle(0, 0, 200, 200)); // 創(chuàng)建一個(gè)小矩形區(qū)域(要排除的部分) Rectangle hole = new Rectangle(50, 50, 100, 100); // 從小區(qū)域中“挖掉”一個(gè)洞 bigRegion.Exclude(hole); // 現(xiàn)在 bigRegion 是一個(gè)外框?yàn)?200x200,中間有 100x100 空洞的區(qū)域
實(shí)際應(yīng)用場(chǎng)景:
創(chuàng)建非矩形窗體的透明區(qū)域:
這樣窗體就變成了一個(gè)“框”,中間是透明的(不可點(diǎn)擊、不繪制)。
this.Region = new Region(new Rectangle(0, 0, 300, 300)); this.Region.Exclude(new Rectangle(50, 50, 200, 200)); // 中間挖空
繪制時(shí)排除某些區(qū)域不重繪:
Graphics g = this.CreateGraphics(); Region updateRegion = g.Clip; // 獲取當(dāng)前裁剪區(qū)域 updateRegion.Exclude(someControl.Bounds); // 排除某個(gè)控件區(qū)域 g.Clip = updateRegion; // 然后只繪制除該控件外的區(qū)域
三、注意事項(xiàng)
- Region 是 GDI+ 資源,使用后應(yīng)釋放:
- 在 WinForms 中,Control.Region 屬性可以設(shè)置控件的可見/可點(diǎn)擊區(qū)域。
- Exclude 操作是破壞性操作,會(huì)修改原 Region 對(duì)象,而不是返回新對(duì)象。
- 對(duì)于高性能圖形應(yīng)用,頻繁創(chuàng)建/銷毀 Region 可能影響性能,需注意優(yōu)化。
四、總結(jié)
| 概念 | 說明 |
|---|---|
| Region | 表示一個(gè)二維區(qū)域,可用于裁剪、繪圖、窗體形狀控制等 |
| Exclude | 從當(dāng)前 Region 中移除指定區(qū)域,實(shí)現(xiàn)“差集”效果,常用于“挖洞”或排除繪制區(qū)域 |
這些功能在自定義控件、不規(guī)則窗體、動(dòng)畫特效等場(chǎng)景中非常有用。
到此這篇關(guān)于C#中Region、Exclude的用法小結(jié)的文章就介紹到這了,更多相關(guān)C# Region、Exclude內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#使用DevExpress中的XtraCharts控件實(shí)現(xiàn)圖表
這篇文章介紹了C#使用DevExpress中的XtraCharts控件實(shí)現(xiàn)圖表的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#利用FileSystemWatcher實(shí)時(shí)監(jiān)控文件的增加,修改,重命名和刪除
好多時(shí)候,我們都需要知道某些目錄下的文件什么時(shí)候被修改、刪除過等。本文將利用FileSystemWatcher實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的增加,修改,重命名和刪除,感興趣的可以了解一下2022-08-08
C#利用原圖和水印圖的重疊簡(jiǎn)單實(shí)現(xiàn)水印的方法
這篇文章主要介紹了C#利用原圖和水印圖的重疊簡(jiǎn)單實(shí)現(xiàn)水印的方法,實(shí)例演示了完整的水印操作類實(shí)現(xiàn)方法,需要的朋友可以參考下2016-04-04
C# VB 實(shí)現(xiàn)10進(jìn)制 16進(jìn)制之間互相轉(zhuǎn)換
如何將10進(jìn)制轉(zhuǎn)成16進(jìn)制,又如何將16進(jìn)制數(shù)轉(zhuǎn)成10進(jìn)制,本文將介紹C#和VB實(shí)現(xiàn)代碼,需要了解的朋友可以參考下2012-11-11
基于C# WinForms開發(fā)的Windows系統(tǒng)監(jiān)控工具
最近開發(fā)了一個(gè)輕量級(jí)的 Windows 系統(tǒng)監(jiān)控工具,可以實(shí)時(shí)監(jiān)控 CPU、內(nèi)存、GPU、溫度、網(wǎng)絡(luò)流量等硬件信息,并通過曲線圖表直觀展示,本文分享一下開發(fā)過程中的核心技術(shù)點(diǎn)和關(guān)鍵代碼實(shí)現(xiàn),需要的朋友可以參考下2025-12-12
C#使用Socket實(shí)現(xiàn)心跳的方法示例
這篇文章主要介紹了C#使用Socket實(shí)現(xiàn)心跳的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實(shí)現(xiàn)
本文主要介紹了C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

