Hallo zusammen,
ich brauch dringend Hilfe, bevor ich ausflippe ...
Habe jetzt schon ewig im Netz gelesen, schätze ich bin einfach zu blöd :/
Möchte ein Bild, das ich in einem Panel anzeigen lasse, per Knopfdruck drehen.
Habe mir hierzu eine Klasse PicturePanel gebastelt, die auch funktioniert:
Habe dann einen Button drunter unter das Bild gesetzt, der die Drehung ermöglichen soll. Muss ja dann die Methode actionPerformed überschreiben.
Dazu habe ich das Bild wieder als Image eingelesen.
Dann habe ich beim Herumsuchen festgestellt, dass ich das Bild, um es zu drehen, in ein BufferedImage umwandeln muss. Wenn ich das richtig verstanden habe, werden die Bildinformationen hier sozusagen pixelweise gespeichert, was Translationen ermöglicht.
Dann habe ich auf dem Graphics-Objekt des BufferedImages die Rotation und Translation durchgeführt (Habe die zwei Aufrufe aus dem www, weiß nicht, ob sie korrekt sind, das ist aber auch sekundär, ich will wissen, ob mein Prinzip stimmt).
Danach erstelle ich ein neues BufferedImage, auf dessen Graphikkontext ich jetzt wiederum das Bild zeichnen will, dessen Graphikkontext ich zuvor verändert habe. (...?)
Abschließend rufe ich die SetImage Methode meines Panels mit dem neuen BufferedImage auf.
Hier der Code:
Geht das in irgendeiner Weise???
edit:
hier noch die Methode toBufferedImage:
ich brauch dringend Hilfe, bevor ich ausflippe ...
Habe jetzt schon ewig im Netz gelesen, schätze ich bin einfach zu blöd :/
Möchte ein Bild, das ich in einem Panel anzeigen lasse, per Knopfdruck drehen.
Habe mir hierzu eine Klasse PicturePanel gebastelt, die auch funktioniert:
Java:
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class PicturePanel extends JPanel {
private Image picture;
public PicturePanel(Image image)
{
super();
SetImage(image);
}
public void SetImage(Image image)
{
picture = image;
repaint();
}
public void paint(Graphics g)
{
super.paint(g);
g.drawImage(picture, 0, 0, this);
}
}
Habe dann einen Button drunter unter das Bild gesetzt, der die Drehung ermöglichen soll. Muss ja dann die Methode actionPerformed überschreiben.
Dazu habe ich das Bild wieder als Image eingelesen.
Dann habe ich beim Herumsuchen festgestellt, dass ich das Bild, um es zu drehen, in ein BufferedImage umwandeln muss. Wenn ich das richtig verstanden habe, werden die Bildinformationen hier sozusagen pixelweise gespeichert, was Translationen ermöglicht.
Dann habe ich auf dem Graphics-Objekt des BufferedImages die Rotation und Translation durchgeführt (Habe die zwei Aufrufe aus dem www, weiß nicht, ob sie korrekt sind, das ist aber auch sekundär, ich will wissen, ob mein Prinzip stimmt).
Danach erstelle ich ein neues BufferedImage, auf dessen Graphikkontext ich jetzt wiederum das Bild zeichnen will, dessen Graphikkontext ich zuvor verändert habe. (...?)
Abschließend rufe ich die SetImage Methode meines Panels mit dem neuen BufferedImage auf.
Hier der Code:
Java:
public void actionPerformed(ActionEvent e)
{
System.out.println("asdkflö");
final BufferedImage scaledBI = toBufferedImage(di);
final BufferedImage scaledBINew = toBufferedImage(di);
Graphics2D graphics = (Graphics2D) scaledBI.getGraphics();
graphics.rotate(Math.toRadians(90), scaledBINew.getWidth() / 2, scaledBINew.getHeight() / 2);
graphics.translate((scaledBINew.getWidth() - scaledBI.getWidth()) / 2, (scaledBINew.getHeight() - scaledBI.getHeight()) / 2);
BufferedImage rotBI = new BufferedImage(scaledBI.getHeight(), scaledBI.getWidth(), BufferedImage.TYPE_INT_RGB);
Graphics2D gRot = rotBI.createGraphics();
gRot.drawImage(scaledBI, 0, 0, null);
picturePanel.SetImage(scaledBI);
}
Geht das in irgendeiner Weise???
edit:
hier noch die Methode toBufferedImage:
Java:
public BufferedImage toBufferedImage(Image img)
{
if (img instanceof BufferedImage)
{
return (BufferedImage) img;
}
// Create a buffered image with transparency
BufferedImage bimage = new BufferedImage(100, 150, BufferedImage.TYPE_INT_ARGB);
// Draw the image on to the buffered image
Graphics2D bGr = bimage.createGraphics();
bGr.drawImage(img, 0, 0, null);
bGr.dispose();
// Return the buffered image
return bimage;
}
Zuletzt bearbeitet: