Größe eines rotierten Images

Ikaron

Bekanntes Mitglied
Okey, hallo 🙂
Ich habe ein kleines Problemchen:
Ich möchte ein Bild rotieren (in einer Methode), und das rotierte Bild dann zurückgeben. Das rotieren geht ja, aber wie groß wird das Bild nachher genau sein? Ich weiss, ich könnte einfach
länge = sqrt(breite² + höhe²);
breite = sqrt(breite² + höhe²);
benutzen, aber das ist ja dann das höchstmögliche Quadrat, aber ich möchte das möglichst kleine Rechteck haben, in dem das Bild liegen kann.. Ich hatte schon 2 Lösungsansätze, aber die sind irgendwie nach hinten lost gegangen...

Danke im Voraus 😉
Ikaron

Edit: Hat sich erledigt 😉 Geht aber grade nur bei Quadraten atm.
Edit 2: Gott bin ich blöd XD Jetzt geht's.

Lösung:
Java:
rSizeX = (int) Math.max(Math.abs(Math.sin(Math.toRadians(Math.toDegrees(Math.atan(sizeX / sizeY)) - angle)) * Math.sqrt(sizeX * sizeX + sizeY * sizeY) / 2), Math.abs(Math.sin(Math.toRadians(360 - Math.toDegrees(Math.atan(sizeX / sizeY)) - angle)) * Math.sqrt(sizeX * sizeX + sizeY * sizeY) / 2)) * 2
rSizeY = (int) Math.max(Math.abs(Math.cos(Math.toRadians(Math.toDegrees(Math.atan(sizeX / sizeY)) - angle)) * Math.sqrt(sizeX * sizeX + sizeY * sizeY) / 2), Math.abs(Math.cos(Math.toRadians(360 - Math.toDegrees(Math.atan(sizeX / sizeY)) - angle)) * Math.sqrt(sizeX * sizeX + sizeY * sizeY) / 2)) * 2;
 
Zuletzt bearbeitet:
:autsch: Bedauerlicherweise muss man davon ausgehen, dass diese Codezeilen KEIN Witz sein sollen. Als pragmatischer 3-Zeiler würde ich schauen, ob man nicht einfach ein Rectangle mit einer AffineTransform drehen und davon dann die Bounds holen kann... Wenn's effizient und weniger... pragmatisch... sein soll, kann man das bei einem Rechteck ja noch relativ einfach selbst ausrechnen ... aber nicht so wie in dem geposteten Code
 
Ja, das soll kein Witz sein 😛
Ich hab das schon einfacher gesehen, aber so funktioniert's nun mal, und das reicht mir 😉
 
Java:
			Rectangle original=new Rectangle(0,0,80,50);
			AffineTransform af=new AffineTransform();
			af.rotate(Math.toRadians(angle),original.getCenterX(),original.getCenterY());
			Shape rotated=af.createTransformedShape(original);
			Rectangle rotBounds=rotated.getBounds();
 

Anhänge

Neue Themen


Zurück
Oben