首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi GDI+ 學習筆記 (29):區域 幾何運算與剪裁

     編輯:Delphi

TGPRegion:矩形、路徑、聯集、交集、補集、剪裁畫布

TGPRegion 表示任意形狀的二維區域,支援布林運算 (Union/Intersect/Complement/Xor) 以及作為剪裁區域限制繪圖範圍。本文示範四大用法:矩形建立、路徑建立、區域聯集、剪裁畫布。

1. 矩形建立並填充


var
  g: TGPGraphics;
  sb: TGPSolidBrush;
  region: TGPRegion;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  sb := TGPSolidBrush.Create(aclGold);
  region := TGPRegion.Create(MakeRect(50, 50, 150, 150));
  g.FillRegion(sb, region);
  sb.Free; region.Free; g.Free;
end;

2. 依路徑建立區域 (多邊形)


var
  g: TGPGraphics;
  path: TGPGraphicsPath;
  region: TGPRegion;
  sb: TGPSolidBrush;
const
  pts: array[0..3] of TGPPoint = ((X:10;Y:10),(X:150;Y:10),(X:100;Y:75),(X:100;Y:150));
begin
  g := TGPGraphics.Create(Canvas.Handle);
  sb := TGPSolidBrush.Create(aclRed);
  path := TGPGraphicsPath.Create;
  path.AddPolygon(PGPPoint(@pts), Length(pts));
  region := TGPRegion.Create(path);
  g.FillRegion(sb, region);
  g.Free; path.Free; region.Free; sb.Free;
end;

3. 區域聯集 (十字形)


var
  g: TGPGraphics;
  sb: TGPSolidBrush;
  region: TGPRegion;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  sb := TGPSolidBrush.Create(aclYellowGreen);
  region := TGPRegion.Create(MakeRect(50, 0, 50, 150)); // 垂直長方形
  region.Union(MakeRect(0, 50, 150, 50)); // 聯集水平長方形
  g.FillRegion(sb, region);
  sb.Free; region.Free; g.Free;
end;

4. 區域剪裁畫布 (限制繪圖範圍)


var
  g: TGPGraphics;
  sb: TGPSolidBrush;
  p: TGPPen;
  region: TGPRegion;
  font: TGPFont;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  sb := TGPSolidBrush.Create(aclYellowGreen);
  p := TGPPen.Create(aclRed);
  font := TGPFont.Create('宋體', 12);
  region := TGPRegion.Create(MakeRect(50, 0, 50, 150));
  region.Union(MakeRect(0, 50, 150, 50));
  g.FillRegion(sb, region);
  g.SetClip(region); // 設定剪裁區域
  g.DrawLine(p, 0, 0, 100, 100); // 僅顯示十字區域內的線段
  sb.SetColor(aclBlack);
  g.DrawString('萬一萬一萬一', -1, font, MakePoint(20.0, 20.0), sb); // 文字亦受剪裁
  sb.Free; p.Free; region.Free; font.Free; g.Free;
end;

其他布林運算方法

  • Intersect:交集
  • Complement:補集 (從區域減去引數)
  • Xor:對稱差集
  • Exclude:排除 (同 Complement)
  • IsVisible:點/矩形是否在區域內

區域運算是複雜 UI 裁剪、非矩形視窗、點擊測試的核心工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved