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

GDI+ 平行四邊形變換繪圖:三點定義仿射映射範例

     編輯:Delphi

效果展示

平行四邊形變換動畫

核心原理

g.DrawImage(img, PGPPoint(@pts), 3) 接受 3 個點陣列定義仿射變換:

  • pts[0] → 圖片右上角映射位置
  • pts[1] → 圖片左上角映射位置
  • pts[2] → 圖片右下角映射位置
  • 左下角由平行四邊形幾何自動推導

拖曳任一控制點即時更新陣列並重繪,實現透視/扭曲效果。

關鍵代碼


procedure TForm1.FormCreate(...);
begin ... // 初始化三點形成矩形
  pts[0] := MakePoint(cx+w, cy);     // 右上
  pts[1] := MakePoint(cx, cy);       // 左上
  pts[2] := MakePoint(cx+w, cy+h);   // 右下
  DoubleBuffered := True; end;

procedure TForm1.FormMouseDown(...);
var i: Integer; begin flag := -1;
  for i := 0 to 2 do if PtInRect(Bounds(pts[i].X-3, pts[i].Y-3, 6, 6), Point(X,Y)) then begin flag:=i; Exit; end; end;

procedure TForm1.FormMouseMove(...);
begin if flag = -1 then Exit; pts[flag] := MakePoint(X, Y); Repaint; end;

procedure TForm1.FormPaint(...);
var g: TGPGraphics; p: TGPPen; i: Integer;
begin g := TGPGraphics.Create(Self.Canvas.Handle); p := TGPPen.Create(aclRed);
  g.DrawImage(img, PGPPoint(@pts), 3); // 核心:3點仿射
  for i := 0 to 2 do g.DrawRectangle(p, pts[i].X-3, pts[i].Y-3, 6, 6); // 控制點
  p.Free; g.Free; end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved