TGPGraphics.DrawImage(img, PGPPoint, Count) 重載接受三個點陣列,定義目標平行四邊形的左上、右上、左下三角點 (第四點自動推算)。此即仿射變換,將矩形源圖像映射至任意平行四邊形,實現透視般扭曲效果。
| 索引 | 對應源圖位置 | 說明 |
|---|---|---|
| pts[0] | 右上角 | 源矩形右上 |
| pts[1] | 左上角 | 源矩形左上 |
| pts[2] | 右下角 | 源矩形右下 |
第四點 (左下) 由平行四邊形幾何性質自動決定。
flag := 索引。flag>=0,更新對應點座標 pts[flag] := MakePoint(X,Y),Repaint。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+ 內部自動解算矩陣並套用像素重採樣。