Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 10:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bilder rotieren - Algorithmus?
BeitragVerfasst: Fr Apr 13, 2012 17:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich bin auf der suche nach einem schnellen Algorithmus der Bilder in guter Qualität rotiert - kennt da jemand einen guten?

Beim Googlen bin ich recht häufig auf "Rotate by Shear" gestoßen, das soll angeblich sehr schnell und sehr gute Qualität haben - allerdings finde ich keine "simple" Implementation davon.

Ich tue mich immer sehr schwer aus irgendwelchen Mathe Formeln den Algorithmus abzulesen und halte mich gern immer an (pseudo) code - hat jemand sowas für die Shear-Rotation?

Danke~
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bilder rotieren - Algorithmus?
BeitragVerfasst: Fr Apr 13, 2012 21:02 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Rotation durch Scherung geht indem du zweimal eine Scherung machst - einmal scherst du das bild entlang der x und dann einmal entlang der y richtung. eine scherung erhältst du indem du die pixel einer zeile weiterschiebst, also z.B. wenn du entlang der x achse scheerst, schiebst du die pixel in der spalte mit nummer x um einen faktor a*x in y richtung. Veranschaulicht etwa hier: http://de.wikipedia.org/wiki/Scherung_%28Geometrie%29 . Wie das aber direkt mit dem Rotationswinkel zusammenhaengt kann ich dir nicht aus dem stehgreif sagen. Aber hier steht ein bischen was, samt code: http://www.ocf.berkeley.edu/~fricke/pro ... aring.html .

Ansonsten kann man natürlich rotieren, wie in der 3D Grafik auch, da kann ich sogar pseudocode fuer liefern:
Code:
  1.  
  2. var
  3.   phi cosphi, sinphi : float;
  4.   x,y : int;
  5.   xOriginal, yOriginal : float;
  6. begin
  7.   phi = frei wählen;
  8.   cosphi = cos(-phi);
  9.   sinphi = sin(-phi);
  10.   for x = 0 to breite do
  11.     for y = 0 to hoehe do
  12.       xOriginal = cosphi*x - sinphi*y;
  13.       yOriginal = sinphi*x + cosphi*y;
  14.       ergebnisBild[x,y] = originalBild[xOriginal, yOriginal];
  15.     endfor
  16.   endfor
  17. end
  18.  

es kann es noch sinnvoll sein, die rotation zu verschieben, so dass du ums zentrum des bildes drehst und nicht um eine kante. Auch musst du entscheiden, was du machst, wenn xOriginal und yOriginal ausserhalb des ungedrehten bildes liegen - ich wuerde sie durch weiß/transparent tauschen. ausserdem Um die qualitaet jetzt aufzubohren kannst du noch beim Zugriff auf das ungedrehte bild bilinear filtern. Schnell duerfte es besonders dann gehen, wenn du die pixeldaten nicht per GDI erhaeltst und setzt, sondern in arrays vorhaeltst oder per scanline zur verfuegung hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bilder rotieren - Algorithmus?
BeitragVerfasst: Fr Apr 13, 2012 21:41 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ImageMagic rotiert durch Scherung: http://www.imagemagick.org/api/MagickCo ... ource.html . Recht konkret mit Sourcecode :-).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 14 Queries | GZIP : On ]