Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   [Firemonkey] TBitmap.Rotate Center? (https://www.delphipraxis.net/189754-%5Bfiremonkey%5D-tbitmap-rotate-center.html)

milos 17. Jul 2016 04:30

[Firemonkey] TBitmap.Rotate Center?
 
Hi,

in Firemonkey gibts ja sone tolle Prozedur in TBitmap (Delphi-Referenz durchsuchenTBitmap.Rotate) mit der man das Bild um den gewünschten Winkel drehen kann. In der wird mit einer TMatrix gearbeitet (Delphi-Referenz durchsuchenTMatrix.CreateRotation usw...) und später benutzt um das Bild rotiert mithilfe von Canvas.DrawBitmap gezeichnet. Leider kann ich da kein Zentralpunkt auswählen bzw kann die alten Koordinaten nicht in die neuen umrechnen bzw. verstehe nicht ganz wie ich das machen könnte. Meine vermutung ist jedoch das ich dazu auch TMatrix.CreateRotation benutzen kann aber wie?

Ich bin mir nicht sicher ob ich den Source Code der Prozedur posten darf also mache ich es mal nicht.

Freundliche Grüsse

milos 18. Jul 2016 07:00

AW: [Firemonkey] TBitmap.Rotate Center?
 
Habs hinbekommen, war einfacher als gedacht. ^^
Falls es jemand mal brauchen sollte hier ein Beispiel, funktioniert wie ich das brauche und ohne Matrizen :D

Delphi-Quellcode:
function RotatePoint(const APoint, ACenter : TPointF; const AAngle : single) : TPointF;
begin
  Result := (APoint - ACenter).Rotate(DegToRad(AAngle)) + ACenter;
end;


var
  LNullPoint, LNullPointRotated : TPointF;
begin
  FRotatedBitmap.Assign(FBitmap);
  FRotatedBitmap.Rotate(45);
 
  LNullPoint := PointF((FRotatedBitmap.Bitmap.Width-FBitmap.Bitmap.Width)/2, (FRotatedBitmap.Bitmap.Height-FBitmap.Bitmap.Height)/2);
  LNullPointRotated := RotatePoint(LNullPoint, PointF(FRotatedBitmap.Bitmap.Width/2, FRotatedBitmap.Bitmap.Height/2), 45);
end;
Nun hat man die alten Koordinaten des Null-Punktes (in diesem Fall: X0 Y0) und kann das gedrehte Bitmap einfach auf die richtige Stelle rendern.

Freundliche Grüsse


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf