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

GDI+ 平行四邊形變換:三點定義仿射映射實作互動拖曳

     編輯:Delphi

原理說明

TGPGraphics.DrawImage(img, PGPPoint, Count) 重載接受三個點陣列,定義目標平行四邊形的左上、右上、左下三角點 (第四點自動推算)。此即仿射變換,將矩形源圖像映射至任意平行四邊形,實現透視般扭曲效果。

三點對應關係

索引對應源圖位置說明
pts[0]右上角源矩形右上
pts[1]左上角源矩形左上
pts[2]右下角源矩形右下

第四點 (左下) 由平行四邊形幾何性質自動決定。

互動拖曳實作

  • FormCreate:初始化三點形成正立矩形,置中顯示。
  • MouseDown:檢測滑鼠是否在三點 6x6 範圍內,設 flag := 索引。
  • MouseMove:若 flag>=0,更新對應點座標 pts[flag] := MakePoint(X,Y),Repaint。
  • MouseUp:flag := -1。

繪圖核心

procedure TForm1.FormPaint(Sender: TObject);
var g: TGPGraphics; p: TGPPen; i: Integer;
begin
  g := TGPGraphics.Create(Self.Canvas.Handle);
  p := TGPPen.Create(aclRed);
  g.DrawImage(img, PGPPoint(@pts), Length(pts)); // 三點平行四邊形繪製
  for i := 0 to 2 do
    g.DrawRectangle(p, pts[i].X-3, pts[i].Y-3, 6, 6); // 控制點視覺化
  p.Free; g.Free;
end;

執行畫面

拖曳三個紅點任意扭曲圖像為平行四邊形:

平行四邊形變換動畫

數學背景

仿射變換矩陣由三對點對唯一決定:

[x']   [a b c] [x]
[y'] = [d e f] [y]
[1 ]   [0 0 1] [1]

GDI+ 內部自動解算矩陣並套用像素重採樣。

應用場景

  • 圖像透視校正 (書頁攤平、建築修正)
  • 2.5D 遊戲精靈傾斜效果
  • UI 元件非矩形遮罩/貼圖
  • AR 標記貼圖透視投影
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved