AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TImage rotieren

Ein Thema von Kevinpptx · begonnen am 6. Dez 2024 · letzter Beitrag vom 12. Dez 2024
Antwort Antwort
Kevinpptx

Registriert seit: 10. Okt 2022
Ort: Sachsen
29 Beiträge
 
Delphi 11 Alexandria
 
#1

TImage rotieren

  Alt 6. Dez 2024, 11:53
Hallo meine Lieben,

ich verzweifle seit Stunden. Ich muss ein TImage in Delphi (Windows VCL) rotieren. Mein Code:
#
Delphi-Quellcode:
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 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 diesen Beitrag hier und diesen, aber das hilft mir alles nichts weiter, weil ich es nicht verstehe und daher nicht implementieren kann. Kann mir einfach jemand sagen, was ich konkret bei meinem Verwendungszweck coden muss, damit das funktioniert. Das Bild sollte auch danach transparent sein (mancher KI-Code hat funktioniert, aber nach der Rotation hatte das Bild die Transparenz verloren, deswegen die Erwähnung dieses Faktes).

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
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#2

AW: TImage rotieren

  Alt 6. Dez 2024, 13:04
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.

https://en.wikipedia.org/wiki/Rotation_matrix
https://www.davdata.nl/math/rotation.html
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#3

AW: TImage rotieren

  Alt 6. Dez 2024, 13:37
Wenn du es mit deinem Gewissen vereinbaren kannst
wäre die Lösung vermutlich hier
[SPOILER]
https://www.delphipraxis.net/168927-...en-objekt.html
[/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.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 6. Dez 2024 um 13:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TImage rotieren

  Alt 6. Dez 2024, 13:38
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Kevinpptx

Registriert seit: 10. Okt 2022
Ort: Sachsen
29 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TImage rotieren

  Alt 10. Dez 2024, 13:17
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 dieses Artikels nicht und werde das auch nicht versuchen, weil es mir das nicht wert ist.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TImage rotieren

  Alt 10. Dez 2024, 21:49
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:
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;
Statt 100 trägst du den gewünschten Winkel ein.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#7

AW: TImage rotieren

  Alt 12. Dez 2024, 16:02
Wieso muss man Moralapostel spielen?
Niemand hat hier über Moral gesprochen. Es ging einfach darum wie du der Aufgabenstellung gerecht werden kannst.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TImage rotieren

  Alt 12. Dez 2024, 16:20
Grundkenntnis in Geometrie sollte für die Transformation eine Rechtecks reichen.
Diese Grundkenntnisse mögen zum Drehen eines Rechteckes ausreichen. Aber dann den Inhalt des gedrehten Rechteckes dann auch "per Hand" sinnvoll zu füllen, ist dann nicht mehr ganz so einfach, finde ich. Da müsste man wohl für jeden Pixel im gedrehten Bild bestimmen, welche Pixel des Original-Bildes zu welchem Anteil darauf gemapped werden, um die richtige Farbe zu bestimmen. Da muss man schon etwas Arbeit reinstecken, finde ich.

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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: TImage rotieren

  Alt 12. Dez 2024, 17:10
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#10

AW: TImage rotieren

  Alt 12. Dez 2024, 17:52
Oder gloech ein viel effizienteres TImage32 verwenden
https://angusj.com/image32/Docs/Unit...ods/Rotate.htm
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz