![]() |
TImage rotieren
Hallo meine Lieben,
ich verzweifle seit Stunden. Ich muss ein TImage in Delphi (Windows VCL) rotieren. Mein Code: #
Delphi-Quellcode:
Ich benötige jetzt eine Prozedur, die mein Auto um eine beliebige Gradzahl dreht. Ich habe vieles versucht, auch die KI hat nicht geholfen. Ich kenne
unit UMain;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, System.Diagnostics, Vcl.StdCtrls, pngimage, System.Math.Vectors; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; Image1: TImage; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + '\Bilder\auto-g.png'); DoubleBuffered := true; // Verhindert Bildflackern jetzt muss noch das abhacken rechts verhindert werde end; procedure TForm1.Timer1Timer(Sender: TObject); var a : integer; begin a := strtoint(Label1.Caption); Inc(a); Label1.Caption := inttostr(a); Image1.Left := Image1.Left + 1;; end; end. ![]() ![]() Ich danke euch schonmal für die Hilfe. Die Lösung hier ist sehr wichtig, da es sich um mein Abschlussprojekt in der Schule handelt. Ich kann nicht verstehen, warum es in Delphi keine vorgefertigte Funktion gibt, um Sachen zu rotieren. Ich verwende Delphi 10.3. Liebe Grüße |
AW: TImage rotieren
Wenn es sich um eine Abschlussprojekt der Schule handelt, sollst du sicher nicht irgendeine fertige Funktion verwenden, die dir das Ergebnis liefert.
Wie lautet den die konkrete Aufgabenstellung? Versuch doch erst mal nur ein Rechteck zu zeichnen, mit einer Rotationsmatrix die neuen Eckpunkte zu berechnen und dann darüber das gedrehte Rechteck. Dafür brauchst du noch nicht mal einen Computer. Das geht auch mit Papier und Taschenrechner. Wenn du die Grundlagen verstanden hast, können wir dir bei Details in der Umsetzung in Delphi helfen. ![]() ![]() |
AW: TImage rotieren
Wenn du es mit deinem Gewissen vereinbaren kannst
wäre die Lösung vermutlich hier [SPOILER] ![]() [/SPOILER] Ansonnsten einfach nach GDI plus RotateTransform googlen. So bin ich auf deisen Thread gestoßen. Es ist wichtig das man lernt selber gut zu googlen. Ich meine ich frage auch lieber nach, mir gefällt die soziale Interaktion. |
AW: TImage rotieren
Es ist durchaus nicht so, dass es dafür keine fertigen Routinen in Delphi geben würde. Die gibt es von FMX, sind aber auch in einem VCL Projekt nutzbar. Auch in der Windows API gibt es dafür mehrere Möglichkeiten. Aber wenn du die einfach nur aufrufst, ist das kaum ein Abschlussprojekt...
Nach deiner Aufgabenstellung wurde ja schon gefragt, die ist wichtig. |
AW: TImage rotieren
Danke an QuickAndDirty, dass er die einzige von 3 Personen war, die versucht hat, nicht den Grundsatz meiner Frage zu hinterfragen im Sinne meiner Anmerkung, dass es sich um ein Teil eines Abschlussprojektes handelt. Wieso muss man Moralapostel spielen? Wen es so stark interessiert: Dieser Code macht einen Bruchteil eines Prozents des Gesamtcodes meines Projektes aus, aber ich habe dies nicht erläutert, weil das Fremde in einem Delphi-Forum nicht angeht.
Ich verstehe leider die Komplexität ![]() |
AW: TImage rotieren
Wie ich schon schrieb gibt es durchaus fertige Lösungen, falls diese zur Aufgabenstellung passen. Man kann z.B. über die Windows API mit SetWorldTransform und einer Transformationsmatrix arbeiten. Die einfachste Variante ist aber das ebenfalls erwähnte FMX zu verwenden. Das geht auch in einer VCL Anwendung.
Delphi-Quellcode:
Statt 100 trägst du den gewünschten Winkel ein.
uses
FMX.Graphics; var Img: FMX.Graphics.TBitmap; begin Img := FMX.Graphics.TBitmap.Create; try Img.LoadFromFile('C:\Temp\test.bmp'); Img.Rotate(100); Img.SaveToFile('C:\Temp\test_rotated.bmp'); finally Img.Free; end; end; |
AW: TImage rotieren
Zitat:
Ich vermute so ein Dreizeiler wie von jaenicke wird je nach Aufgabenstellung einfach 0 Punkte bringen. Ein Abschlussprojekt soll normalerweise demonstrieren, was man über den gesamten Zeitraum gelernt hat. Grundkenntnis in Geometrie sollte für die Transformation eine Rechtecks reichen. |
AW: TImage rotieren
Zitat:
Wenn das aber wirklich nur ein winziger Teil des Projektes ist, dann ist das ganze Projekt vermutlich etwas komplett anderes. Dann kann man auch diese "Zauber-Funktionen" nutzen, die in den anderen Postings erwähnt wurden. :-D |
AW: TImage rotieren
Eine Transformation / Rotation um einen Winnkel der nicht durch 90 Grad teilbar ist, ist ganz schön aufwändig. Jedenfalls wenn es halbwegs ordentlich aussehen soll.
Aber ganz erhlich, hier im Forum nach sowas eine Frage zu stellen und auf eine Antwort zu warten, ist gaga. Ein bisschen Suchen im Internet und man hat zig Lösungen vor der Nase. Genauso gaga finde ich, sich über irgend eine der Antworten aufzuregen. Jemand der das nicht pakt, wirds im Leben nicht leicht haben. Und ganz sicher kein Programmierer. |
AW: TImage rotieren
Oder gloech ein viel effizienteres TImage32 verwenden
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz