Bild skalieren, drehen, positionieren


Kwa

Grünschnabel
#1
Hallo zusammen,

ich sage gleich ich bin ein verzweifelter Anfänger und kämpfe mit einfachsten Sachen :(

Wie oben beschrieben geht es um das Skalieren, Drehen sowie Positionieren eines Bildes in einem JPanel.
Kurz zum Hintergrund: ich bin dabei ein kleines Spiel zu entwickeln und muss feststellen, dass in Java ein Bild anzupassen doch viel mehr Arbeit ist als ich es gedacht habe. Etliche Videos, Seiten etc. haben nur bedingt geholfen. Da die Methoden und Parameter der Klassen nur zur Hälfte erklärt werden haben meine Anstrengungen nur zum Teilerfolg geführt.

Mein Gedanke war wie folgt:
1. Zu Beginn lade ich das Bild hoch (Dies hat soweit funktioniert!). Das habe ich mit der Klasse BufferedImage erledigt.
2. Das Originalbild ist zu groß (762 * 586 Pixel), aus diesem Grund muss es auf 78 * 60 Pixel skaliert werden
3. Skaliertes Bild hat einen Punkt um den es rotiert werden soll, der nicht in der Mitte des Panels und nicht in der Mitte des Bildes liegt.
4. Skaliertes Bild muss dann einen festen Platz im Framen.
(Dies ist eine Art Figur, die in Richtung des Spieler feuert, je nachdem wo der ist muss sich die Kanone drehen, also einfach der Winkel mit dem es gezeichnet wird)

Ich schreibe kurz den Code rein. Geht bitte davon aus, dass das bild (Ich nenne es dann unten img) erfolgreich geladen werden konnte:

public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(img, getWidth() - 150 - 78, getHeight() / 2 - 30, 78, 60, null);
//Das obere Befehl deckt 2 Anforderungen ab und funktioniert! 2tes und 3tes Argument bestimmen die Position, 4tes und 5tes skalieren das Bild. Da ich mit der Drehung //nicht weiter gekommen bin, bin ich auf der Suche nach Infos auf die Klasse AffineTransform gestoßen und halt rumprobiert. Das hat wie gesagt nur zur Hälfte geklappt :(
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(0)); //das habe ich erst mal auf 0 gelassen, Skalierung und Positionierung hat ja je nicht geklappt.
at.scale((78/762), (60/586)); //komischerweise das Bild was ich da bekomme ist kleiner als 78 * 60 Pixel???
g2d.setTransform(at);
g2d.drawImage(img, .............................., null); //hier soll das gleiche Bild wie oben gezeichnet werden, nur eben mit der variablen Drehfunktion. Ich habe ich viel probiert, leider hat nichts funktioniert. Auch Positionierungsbefehl fehlt translate(), aber das habe ich gar nicht verstanden
}

Danke für Erklärungen im Voraus. Wäre cool wenn gleich die Parameter, Methoden sowie Klassen miterklärt werden.

Mit bestem Gruß
 

Neue Beiträge