Hi,
zu Feinabgleich eines Kamerabildes soll/muss dieses sowohl in X/Y Richtung, als auch
im Winkel ausgerichtet werden.
Die Nutzung der hier viel empfohlenden Routine mit
SetWorldTransform bringt es
aber nicht, da der Drehpunkt nicht die Mitte des Quellbildes ist, sondern die des Zieles.
Delphi-Quellcode:
procedure SetCanvasZoomAndRotation(ACanvas: TCanvas; Zoom: Double;
Angle: Double; CenterpointX, CenterpointY: Double);
var
form: tagXFORM;
rAngle: Double;
begin
rAngle := Angle/ 360 * PI *2;
SetGraphicsMode(ACanvas.Handle, GM_ADVANCED);
SetMapMode(ACanvas.Handle, MM_ANISOTROPIC);
form.eM11 := Zoom * Cos(rAngle);
form.eM12 := Zoom * Sin(rAngle);
form.eM21 := Zoom * (-Sin(rAngle));
form.eM22 := Zoom * Cos(rAngle);
form.eDx := CenterpointX;
form.eDy := CenterpointY;
SetWorldTransform(ACanvas.Handle, form);
end;
Aufruf erfolg so:
Delphi-Quellcode:
procedure TForm1.btnDClick(Sender: TObject);
var
i, w, h: Integer;
C: TCanvas;
begin
C := pbBase.Canvas; // dort will ich hinzeichnen
SetCanvasZoomAndRotation(C, trckbrZ.Position, trckbrA.Position, trckbrX.Position, trckbrY.Position);
C.Draw(0, 0, imgTarget.Picture.Graphic); // imgTarget ist die Quelle
end;
Was muss ich wie abändern, damit der Drehpunkt die Mitte des Quellbild ist
und nicht oben links (siehe Anhang).