Interface Bild rotieren

CptK

Bekanntes Mitglied
Hallo, ich habe da ein etwas komplizierteres Problem:
Ich habe mir eine Klasse img erstellt, in der ein Bild und die dazugehörigen Werte gespeichert werden:
Code:
package Data;

import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class img {
 
    private int xPos, yPos, width, height;
    private BufferedImage image;
    private String path;
 
    public img(int x, int y, int w, int h, String p) {
        xPos = x;
        yPos = y;
        width = w;
        height = h;
        path = p;
    
        try {
            image = ImageIO.read(new File(this.path));
        } catch (IOException e) {
            System.out.println("ERROR! DAS BILD " + this.path + " KONNTE NICHT GELADEN WERDEN!");
        }
    }
 
    public img(int x, int y, int w, int h, BufferedImage i) {
        xPos = x;
        yPos = y;
        width = w;
        height = h;
        image = i;
    }

    public int x() {
        return xPos;
    }

    public void setX(int xPos) {
        this.xPos = xPos;
    }

    public int y() {
        return yPos;
    }

    public void setY(int yPos) {
        this.yPos = yPos;
    }

    public int width() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int height() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public BufferedImage image() {
        return image;
    }

    public void setImage(BufferedImage image) {
        this.image = image;
    }

    public String path() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }
 
}

In meiner Panel Klasse wird dann ein Bild (hier wichtig: kanonen_rohr) erstellt und es gibt eine Methode zum rotieren:
Code:
package Gui;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import Data.img;
public class Panel extends JPanel {
    private static final long serialVersionUID = 1L;
    private img kanone_gestell = new img(20, 390, 120, 70, "rsc/img/kanone_gestell.png");
    private img kanone_rohr = new img(20, 390, 120, 70, "rsc/img/kanone_rohr.png");
    private double angle = 0;
    BufferedImage kanone_rohr_base; 
 
    private img test = new img(20, 390, 120, 70, rotateImageX(kanone_rohr.image(), 19));
 
    Draw draw = new Draw(this, kanone_gestell, kanone_rohr);
 
    public Panel() {
        try {
            kanone_rohr_base = ImageIO.read(new File("rsc/img/kanone_rohr.png"));
        } catch (IOException e) {
            System.out.println("ERROR! DAS BILD " + "rsc/img/kanone_rohr.png" + " KONNTE NICHT GELADEN WERDEN!");
        }
        setSize(1100,820);
        setLayout(null);
        setVisible(true);
        repaint();
    }
 
    public void paintComponent(Graphics g) {
        draw.draw_main(g);
        //g.drawImage(test.image(), test.x(), test.y(), test.image().getWidth(), test.image().getHeight(), null);
     
        repaint();
    }
 
    public BufferedImage rotateImageX(BufferedImage img, double angle) {
        double sin = Math.abs(Math.sin(Math.toRadians(angle)));
        double cos = Math.abs(Math.cos(Math.toRadians(angle)));
        int w = img.getWidth(null), h = img.getHeight(null);
        int neww = (int) Math.floor(w * cos + h * sin);
        int    newh = (int) Math.floor(h * cos + w * sin);
        BufferedImage bimg = new BufferedImage(neww, newh,BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = bimg.createGraphics();
        g.translate((neww - w) / 2, (newh - h) / 2);
        g.rotate(Math.toRadians(angle), w / 2, h / 2);
        g.drawRenderedImage(img, null);
        g.dispose();
        return bimg;
    }
 
    public img getKanoneGestell() { return kanone_gestell; }
    public img getKanoneRohr() { return kanone_rohr; }
    public double getAngle() { return angle; }
    public void setAngle(double a) { angle = a; }
    public BufferedImage getKanone_Rohr_Base() { return kanone_rohr_base; }
 
}

In der Klasse Draw wird dann gezeichnet:
Code:
package Gui;

import java.awt.*;

import Data.img;

public class Draw {
 
    private Panel p;
    private img kanone_gestell, kanone_rohr;
 
    private img meer = new img(0, 0, 3300, 800, "rsc/img/meer.png");
    private img brett = new img(0, 700, 1100, 80, "rsc/img/brett.png");
    private img felsen = new img(0, 350, 300, 400, "rsc/img/felsen.png");
 
    public Draw(Panel panel, img kanone_gestell, img kanone_rohr) {
        p = panel;
        this.kanone_gestell = kanone_gestell;
        this.kanone_rohr = kanone_rohr;
    }
 
    public void draw_main(Graphics g) {
        g.drawImage(meer.image(), meer.x(), meer.y(), meer.width(), meer.height(), null);
    
        g.drawImage(kanone_gestell.image(), kanone_gestell.x(), kanone_gestell.y(), kanone_gestell.width(), kanone_gestell.height(), null);
        g.drawImage(felsen.image(), felsen.x(), felsen.y(), felsen.width(), felsen.height(), null);
        g.drawImage(brett.image(), brett.x(), brett.y(), brett.width(), brett.height(), null);
        g.drawImage(kanone_rohr.image(), kanone_rohr.x(), kanone_rohr.y(), kanone_rohr.width(), kanone_rohr.height(), null);
    }
 
}

So jetzt habe ich das Kanonenrohr gezeichnet. Nun möchte ich, dass man dieses durch das Bewegen der Maus rotieren kann, sprich: wird die Maus nach oben bewegt, soll sich das Rohr gegen den Uhrzeigersinn drehen, bewegt man die Maus nach unten, so soll das Rohr mit dem Uhrzeigersinn gedreht werden. Dabei soll es sich um den Punkt der Halterung (Kreis in der Mitte drehen). Bild im Anhang. Bisher kann man das Bild, wenn man es nur einmal rotiert, zwar drehen, es rotiert aber um den falschen Punkt. Rotiert man es mehrfach, wird es immer kleiner unter verschwindet irgendwann.
Mein MouseMotionHandler:
Code:
package Action;
import java.awt.event.*;
import Gui.Panel;
public class MouseMotionHandler implements MouseMotionListener {
 
    private Panel p;
    private int mouseY = 0;
 
    private int rangle = 2;
 
    public MouseMotionHandler(Panel panel) {
        p = panel;
    }
 
    @Override
    public void mouseDragged(MouseEvent e) {
     
    }
    @Override
    public void mouseMoved(MouseEvent e) {
        if(e.getY() > mouseY) {
            p.getKanoneRohr().setImage(p.rotateImageX(p.getKanone_Rohr_Base(), p.getAngle()));
            p.setAngle(p.getAngle()-rangle);
            p.repaint();
        } else if(e.getY() < mouseY){ 
            p.getKanoneRohr().setImage(p.rotateImageX(p.getKanone_Rohr_Base(), p.getAngle()));
            p.setAngle(p.getAngle()+rangle);
            p.repaint();
        }
     
        mouseY = e.getY();
    }
}

Es tut mir leid, dass das jetzt so viel ist, ich bin aber wirklich am verzweifeln. Falls jemand eine funktionierende Rotation hat, würde ich diese natürlich auch gerne nehmen.

Vielen Dank!

EDIT: Ich habe die Klassen Panel und MouseMotionHandler jetzt so umgeschrieben, dass eine Rotation statfindet. Ich habe aber noch das Problem, dass die Seitenverhältnisse nicht stimmen und dann es nicht um den richtigen Punkt rotiert (Stand 12.12.2018, 17:23Uhr).
 

Anhänge

  • kanone_rohr.png
    kanone_rohr.png
    3,1 KB · Aufrufe: 27
Zuletzt bearbeitet:

mihe7

Top Contributor
Theoretisch wäre Dir schon zu helfen, das Problem ist nur, dass ich den Code nicht lesen kann. Könnte daran liegen, dass die Java-Konventionen zur Benennung von Bezeichnern nicht eingehalten wurden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
J Bild einfügen Java Basics - Anfänger-Themen 3
T ASCII Art von Bild erstellen. Java Basics - Anfänger-Themen 32
E Bild OS-unabhängig einbinden mit URL Java Basics - Anfänger-Themen 4
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben