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

Delphi GDI+ 學習筆記 (25):Transform 座標變換 (縮放/旋轉/平移)

     編輯:Delphi

繪圖座標系變換:Scale/Rotate/Translate 疊加與重置

TGPGraphics 維護一個「世界座標到裝置座標」的轉換矩陣。ScaleTransform、RotateTransform、TranslateTransform 依序右乘矩陣,影響後續所有繪圖指令。ResetTransform 恢復單位矩陣。

1. 縮放


g.DrawRectangle(p, rect); // 原始
g.ScaleTransform(2, 0.5); // X 放大 2 倍,Y 縮小 0.5 倍
p.SetColor(aclBlue);
g.DrawRectangle(p, rect); // 變換後重繪
g.ResetTransform;

2. 旋轉


g.DrawRectangle(p, rect);
g.RotateTransform(28); // 順時針 28 度 (負值逆時針)
p.SetColor(aclBlue);
g.DrawRectangle(p, rect);
g.ResetTransform;

3. 平移


g.DrawRectangle(p, rect);
g.TranslateTransform(111, 111); // 位移 (111,111)
p.SetColor(aclBlue);
g.DrawRectangle(p, rect);
g.ResetTransform;

矩陣疊加順序注意

  • 呼叫順序即矩陣右乘順序:M' = M × T × R × S
  • 典型順序:縮放 → 旋轉 → 平移 (SRT),否則旋轉中心、縮放中心會偏移。
  • 若需以物件中心旋轉:Translate(center) → Rotate → Translate(-center) → Draw

進階:取得/設定完整矩陣


var m: TGPMatrix;
g.GetTransform(m); // 取得目前 3x2 仿射矩陣
g.SetTransform(m); // 直接設定
g.MultiplyTransform(m2); // 右乘另一矩陣

掌握 Transform 即掌握 GDI+ 所有幾何變換核心,複雜動畫、相機視角、骨骼動畫皆由此延伸。

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