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

再學GDI+[66]: 路徑漸層筆刷多形狀套用 - SetInterpolationColors 與 GetRectangle 跨形狀漸層共享

     編輯:Delphi

前言

TGPPathGradientBrush 的強大之處在於:同一組漸層定義可套用至不同形狀。本文示範如何建立一個三角形路徑筆刷,透過 GetRectangle 取得其外接矩形,再將相同漸層設定套用至矩形與橢圓,實現跨形狀漸層一致性。

核心技術流程

  1. 建立三角形路徑 → 建立筆刷 → 設定 SetInterpolationColors
  2. 呼叫 GetRectangle 取得外接矩形
  3. 重設路徑為矩形/橢圓 → 重建筆刷 → 套用相同插值顏色
  4. 平移繪製位置並排顯示

完整實作程式碼

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  path: TGPGraphicsPath;
  pb: TGPPathGradientBrush;
  rt: TGPRect;
const
  pts: array[0..2] of TGPPoint = ((X:90; Y:10), (X:10; Y:160), (X:160; Y:160));
  colors: array[0..2] of TGPColor = (aclGreen, aclAqua, aclBlue);
  pos: array[0..2] of Single = (0.0, 0.25, 1.0);  {位置需在 0~1 之間}
begin
  g := TGPGraphics.Create(Canvas.Handle);
  path := TGPGraphicsPath.Create;
  
  {=== 三角形 ===}
  path.AddPolygon(PGPPoint(@pts), Length(pts));
  pb := TGPPathGradientBrush.Create(path);
  pb.SetInterpolationColors(@colors, @pos, Length(colors));
  g.FillPath(pb, path);
  
  {=== 取得外接矩形 ===}
  pb.GetRectangle(rt);  {關鍵:取得筆刷定義的外接矩形}
  path.Reset;
  path.AddRectangle(rt);
  pb.Free;
  pb := TGPPathGradientBrush.Create(path);
  pb.SetInterpolationColors(@colors, @pos, Length(colors));
  g.TranslateTransform(160, 0);  {右移繪製}
  g.FillPath(pb, path);
  
  {=== 橢圓 ===}
  path.Reset;
  path.AddEllipse(rt);
  pb.Free;
  pb := TGPPathGradientBrush.Create(path);
  pb.SetInterpolationColors(@colors, @pos, Length(colors));
  g.TranslateTransform(160, 0);
  g.FillPath(pb, path);
  
  pb.Free; path.Free; g.Free;
end;

執行效果預覽

三形狀共享漸層效果

關鍵技術點解析

方法/屬性作用注意事項
SetInterpolationColors定義精確漸層色帶(顏色+位置)位置陣列首尾必須為 0.0 和 1.0
GetRectangle取得筆刷定義時的外接矩形僅在路徑建立筆刷後有效
path.Reset清空路徑點,重複使用 path 物件避免頻繁 Create/Free 開銷
g.TranslateTransform平移繪圖原點,實現並排顯示累積效果,注意還原或重建 Graphics

實戰應用場景

  • UI 主題系統:同一組漸層定義套用按鈕、面板、標題列等不同形狀控制項
  • 資料視覺化:長條圖、餅圖、散佈圖標記共用漸層色帶
  • 遊戲特效:粒子系統中不同形狀粒子共用漸層定義

表單定義檔

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 164
  ClientWidth = 491
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
end
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved