Hallo, ich möchte ein BufferedImage durch Tastendruck drehen.
Das klappt soweit auch, das Problem ist nur, dass ich das ganze nur 1x drehen kann.
Ich weiß auch mehr oder weniger woran es liegt und zwar daran, dass immer der gleiche x, y Parameter + die gleiche Rotationsgröße übergeben wird.
Das Problem ist nun, dass ich die Rotationsgröße ändern kann, dann wird das Bild aber ungleichmäßig gedreht. Es soll aber gleichmäßig gedreht werden.
Hier mal der Code:
Das klappt soweit auch, das Problem ist nur, dass ich das ganze nur 1x drehen kann.
Ich weiß auch mehr oder weniger woran es liegt und zwar daran, dass immer der gleiche x, y Parameter + die gleiche Rotationsgröße übergeben wird.
Das Problem ist nun, dass ich die Rotationsgröße ändern kann, dann wird das Bild aber ungleichmäßig gedreht. Es soll aber gleichmäßig gedreht werden.
Hier mal der Code:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Transparency;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Bewegung extends JFrame implements KeyListener {
int richtung = 1;
int x = 50;
int y = 50;
double i = 1;
int neuesBild = 0;
public Bewegung(String newTitel) {
super.setTitle(newTitel);
super.addKeyListener(this);
}
public static void main(String str[]) {
Bewegung fenster = new Bewegung("a");
fenster.setSize(500, 500);
fenster.setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
BufferedImage myPicture = null;
try {
// switch (richtung) {
// case 0:
System.out.println("a");
myPicture = ImageIO.read(new File(
"D://dev//workspaces//ps//ST//src//car.jpg"));
// AffineTransform at = new AffineTransform();
// at.translate(getWidth() / 2, getHeight() / 2);
// at.rotate(Math.PI / 4);
// at.scale(0.5, 0.5); // evt entfernen
// at.translate(-myPicture.getWidth()/2, -myPicture.getHeight()/2);
/*
* break; case 1: myPicture = ImageIO.read(new File(
* "D://dev//workspaces//ps//ST//src//carD.jpg")); break; case 2:
* myPicture = ImageIO.read(new File(
* "D://dev//workspaces//ps//ST//src//carL.jpg")); break; case 3:
* myPicture = ImageIO.read(new File(
* "D://dev//workspaces//ps//ST//src//carU.jpg")); break; }
*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (richtung == 0) {
AffineTransform at = new AffineTransform();
at.translate(100, 100); // Position, wo das Bild gezeichnet wird
at.rotate(Math.PI / 9); // Größe der Rotation
// at.scale(0.5, 0.5); // evt entfernen
// at.translate(-myPicture.getWidth()/2, -myPicture.getHeight()/2);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(myPicture, at , null);
} else {
g.drawImage(myPicture, 100, 100, null);
}
// g.setColor(new Color(0, 0, 0));
// g.drawOval(x, y, 100, 100);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("A");
if (e.getKeyCode() == e.VK_RIGHT) {
x = x - 5;
i = i + 0.1;
richtung = 0;
} else if (e.getKeyCode() == e.VK_LEFT) {
x = x - 5;
richtung = 2;
} else if (e.getKeyCode() == e.VK_UP) {
y = y - 5;
richtung = 3;
} else if (e.getKeyCode() == e.VK_DOWN) {
y = y + 5;
richtung = 1;
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}