Bild drehen + richtige größe berechnen

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi, momentan drehe ich ein Bild so:

Code:
	void rotatePic() { 
		 
		double angle = rotateDeg.getValue() * 3.14 / 180.0; 
		int diagonale = (int)Math.sqrt(curImg.getWidth() * curImg.getWidth() + curImg.getHeight() * curImg.getHeight()) + 1; 
		old = new BufferedImage(diagonale, diagonale, BufferedImage.TYPE_INT_ARGB); 
		Graphics2D comp2D = old.createGraphics(); 
		comp2D.drawImage(curImg, (diagonale - curImg.getWidth()) / 2, (diagonale - curImg.getHeight()) / 2, null); 
		comp2D.dispose(); 
		AffineTransform tx = AffineTransform.getRotateInstance(angle, old.getWidth() / 2, old.getHeight() / 2); 
		AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);	 
		shownImg = op.filter(old, null); 
		pic.setIcon(new ImageIcon(shownImg)); 
	}

Nur hab ich da als dummen Nebeneffekt, dass das Bild größer wird, da dass Bild ja am Ende schräg stehen kann. Wie kann ich jetzt berechnen, wie groß das Bild mindestens sein muss, wenn ich die länge und breite des Bildes habe und die Gradzahl um die es gedreht werden soll, um noch vollständig angezeigt zu werden?
 
Hab mir gedacht, ich könnte einfach die neu resultierenden Dreiecke berechnen und dann anhand deren höhe bzw. breite die höhe und breite des neuen bildes berechnen. 1. Versuch: Sinus und Cosinus benutzen

Code:
	void rotatePic() { 
		
		int winkel = rotateDeg.getValue();
		double angle = winkel * 3.14 / 180.0; 
		winkel = ((winkel < 0) ? winkel * -1 + 180 : winkel);
		double y = curImg.getWidth() * Math.sin(winkel) + curImg.getHeight() * Math.cos((winkel <= 270) ? winkel + 90 : winkel - 270);
		double x = curImg.getWidth() * Math.cos(winkel) + curImg.getHeight() * Math.sin((winkel <= 270) ? winkel + 90 : winkel - 270);
		System.out.println(y + " _ " + x);
		System.out.println(curImg.getHeight() + " _ " + curImg.getWidth());
		int diagonale = (int)Math.sqrt(curImg.getWidth() * curImg.getWidth() + curImg.getHeight() * curImg.getHeight()) + 1; 
		old = new BufferedImage((int)x, (int)y, BufferedImage.TYPE_INT_ARGB); 
		Graphics2D comp2D = old.createGraphics(); 
		comp2D.drawImage(curImg, (int)x / 2, (int)y / 2, null); 
		comp2D.dispose(); 
		AffineTransform tx = AffineTransform.getRotateInstance(angle, x / 2, y / 2); 
		AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);	 
		shownImg = op.filter(old, null); 
		pic.setIcon(new ImageIcon(shownImg)); 
	}

Aber das funktioniert überhaupt nicht. ich bekomme immer negative Ergebnisse raus ???:L . Jemand anderes hat mir empfohlen es mit dem Phytagoras zu versuchen. Da hab ich aber überhaupt keine Idee für einen ansatz.
 
Funktioniert leider auch nicht. Der Fehler muss woanders liegen. Blöderweiße hab ich keine Ahnung wo ...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben