Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

SetWorldTransform - Grafik drehen

  Alt 5. Nov 2021, 14:49
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).
Miniaturansicht angehängter Grafiken
demo.png  
Angehängte Dateien
Dateityp: zip DemoTransform.zip (4,8 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat