unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, GR32, GR32_Image, GR32_Transforms, StdCtrls;
type
TForm1 =
class(TForm)
Src: TImage32;
Dst: TImage32;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
PT: TProjectiveTransformation;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
PT:=TProjectiveTransformation.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
PT.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Erstmal 4 Punkte definieren für das vierseitige konvexe Ziel-Polygon
// Reihenfolge Oben/Linke, Oben/Rechts, Unten/Rechts, Unten/Links
PT.X0:=50;
PT.Y0:=20;
PT.X1:=Src.Bitmap.Width-50;
PT.Y1:=20;
PT.X2:=Src.Bitmap.Width-10;
PT.Y2:=Src.Bitmap.Height-10;
PT.X3:=10;
PT.Y3:=Src.Bitmap.Height-10;
// Wichtig: Man muss in TProjectiveTransformation die Grösse
// des Quell-Rechtecks definieren!
PT.SrcRect:=FloatRect(0.0,0.0,Src.Bitmap.Width,Src.Bitmap.Height);
// Breite und Höhe der Ziel-Bitmap setzen
Dst.Bitmap.Width:=Src.Bitmap.Width;
Dst.Bitmap.Height:=Src.Bitmap.Height;
Dst.BeginUpdate;
// Verformen
Transform(Dst.Bitmap,Src.Bitmap,PT);
Dst.EndUpdate;
// und Anzeigen
Dst.Invalidate;
end;
end.