Bild rotieren?
-
Hi,
wie kann ich denn am einfachsten ein Bild um einen beliebigen Grad-Wert rotieren? Die Bilddaten liegen in einem 32-Bit-Array vor.
Danke!
-
In welcher Form soll das rotierte Bild vorliegen ?
Am schönsten gehts einfach mit Resampling (Skalierungsfunktionalität bekommt da gleichzeitig geschenkt)
-
Auf http://www.codeproject.com/ gabs mal ein paar schöne Beispiel zu dem Problem.
Achja, bist du sicher das dein Bild in einem 32 Bit Array vorliegt? Ganz schön kleines Bild, oder?!
grüße
-
Danke, werde mich mal umschauen.
David_pb schrieb:
Auf http://www.codeproject.com/ gabs mal ein paar schöne Beispiel zu dem Problem.
Achja, bist du sicher das dein Bild in einem 32 Bit Array vorliegt? Ganz schön kleines Bild, oder?!
grüße
32 Bit pro Feld natürlich.
-
Hat denn jemand einen Resampling-Algorithmus, Tutorials, Beispiele oder sonst was? Finde leider nix.
-
-
David_pb schrieb:
Da: https://secure.codeproject.com/bitmap/rotatebyshear.asp
grüße
Liefert ja schöne Resultate, aber ist leider zu langsam/lang für meine Zwecke.
In dem Text wird die "klassische Methode" mit Resampling erwähnt. Wie sähe die denn aus?Danke!
-
*push* Jemand 'ne Idee?
-
Die klassische Methode ist einfach folgende: Für jeden Pixel im Zielbild, den Du malen mußt machst Du die Rotation rückgängig und erhältst damit Koordinaten im Quellbild. Dann schlägste nach was dort für ne farbe ist. Dieses Nachschlagen kann man einfach machen indem man die Koordinaten rundet, man kann aber auch bilinear interpolieren. Es sind sogar kubische Interpolation und noch höhere Ordnungen möglich.
-
Hi Fans,
die klassische Methode beruht auf Vektor-Algebra: Der Vektor [x1, x2] des Originalpixels wird mit der 4x4-Transformationsmatrix T multipliziert. Die Komponenten der Matrix bestehen aus cos(alpha), sin(alpha) etc. Müsst Ihr nachsehen. Das Ergebnis ist der Zielvektor des Bildpunktes [x1', x2']. Praktisch funktioniert das für Bilder, die nicht über den Bildrand hinausgehen. Sonst muss man da noch was abschneiden.
-
jerry schrieb:
die klassische Methode beruht auf Vektor-Algebra: Der Vektor [x1, x2] des Originalpixels wird mit der 4x4-Transformationsmatrix T multipliziert. Die Komponenten der Matrix bestehen aus cos(alpha), sin(alpha) etc. Müsst Ihr nachsehen. Das Ergebnis ist der Zielvektor des Bildpunktes [x1', x2']. Praktisch funktioniert das für Bilder, die nicht über den Bildrand hinausgehen. Sonst muss man da noch was abschneiden.
Wie Jester schon gesagt hat, funktioniert die klassiche Methode genau andersherum. Deine Transformationsmatrix wird invertiert, um von einem Punkt des Zielbildes den Ursprungspunkt finden zu können. Da der dann aber typischerweise nicht genau auf einem Pixel liegt, muss zwischen den angrezenden Pixeln interpoliert werden.
-
Ich glaub, da reden einige aneinander vorbei. Er sprach von Bilddaten, dh. Daten eines Bildes. Das ist was anderes als Originaldaten und (Ab)Bilddaten. Mir scheint, er hat einen Vektor mit Originaldaten, dén er rotieren will. Ausserdem, falls Jesters Interpretation gilt, dann nimmt man die Transformationsmatrix und setzt den negativen Winkel ein. OK?
Gruss Jerry