rotation von Graphics2D mit anschließender Translation

jperl

Mitglied
hi leute,

ich bekomme einen barcode welchen ich um einen beliebigen winkel rotieren will (siehe bild)


ich rotiere um den ursprung mit folgendem code:

Java:
public void render(Graphics2D grx, Rectangle2D rectangle) {
	AffineTransform at = new AffineTransform();
	at.rotate(rotation * Math.PI / 180);	
			
	Graphics2D g = (Graphics2D) grx.create();
	g.transform(at);
	
	try {
		b.draw(g, 0, 0);
	} catch (Exception exp) {
		exp.printStackTrace();
	}
}

wenn ich jetzt um einen größeren winkel rotiere, rotiere ich das bild aus meinem sichtbaren bereich hinaus, welcher durch den rahmen gekennzeichnet ist.
siehe für den winkel von 89°.



meine idee war den barcode mit einer translation wieder sichtbar zu machen. allerdings verschieben sich durch meine affine transformation auch die koordinatenachsen, sodass ich es schwer finde die translation zu finden, welche für alle winkel funktioniert.

kann mir jemand weiterhelfen, bzw. einen besseren vorschlag nennen um den barcode beliebig drehen zu können.
wäre super.

danke im voraus.

mfg
jperl
 

Geeeee

Bekanntes Mitglied
Grundsätzlich solltest du vor der Rotation das Objekt auf den Rotationsmittelpunkt setzten.
Einfaches Beispiel: Stell dir ein JFrame vor, auf das irgendein Bild gedreht gemalt wird. Wenn ich dieses nun einfach rotieren würde, wäre der Rotationspunkt 0,0 im Frame (also oben links) und alles würde sich um ihn drehen. Das liegt daran, dass ich hier ja das gesamte Graphicsobjekt des Frames drehen möchte.
Damit dein Bild ordentlich gedreht wird (auch auf größen Graphicsobjekten) solltest du den Barcode zuererst auf 0,0 setzten -> drehen -> wieder zurück.
Noch ein kleiner Hinweis: Die Transformation wird scheinbar von hinten nach vorne abgearbeitet (wieso, weshalb, warum kann man sich anlesen). Also erst dahinbewegen wo es hin soll, drehen und danach mit der Mitte in den Ursprung deines Koordinatensystems schieben.
 

jperl

Mitglied
Grundsätzlich solltest du vor der Rotation das Objekt auf den Rotationsmittelpunkt setzten.
Einfaches Beispiel: Stell dir ein JFrame vor, auf das irgendein Bild gedreht gemalt wird. Wenn ich dieses nun einfach rotieren würde, wäre der Rotationspunkt 0,0 im Frame (also oben links) und alles würde sich um ihn drehen. Das liegt daran, dass ich hier ja das gesamte Graphicsobjekt des Frames drehen möchte.
Damit dein Bild ordentlich gedreht wird (auch auf größen Graphicsobjekten) solltest du den Barcode zuererst auf 0,0 setzten -> drehen -> wieder zurück.
Noch ein kleiner Hinweis: Die Transformation wird scheinbar von hinten nach vorne abgearbeitet (wieso, weshalb, warum kann man sich anlesen). Also erst dahinbewegen wo es hin soll, drehen und danach mit der Mitte in den Ursprung deines Koordinatensystems schieben.

Danke für deine Antwort.
Das Entscheidende war der Hinweis, dass die Transformationen wenn sie sich in einer Matrix befinden von hinten nach vorne abgearbeitet werden. Das hatte ich vergessen.

jperl
 

Ähnliche Java Themen

Neue Themen


Oben