Ich habe Klasse Airplane
genannt. Innerhalb dieser Klasse habe ich Variable img
, die ein BufferedImage
Typ ist. Was ist mehr, ich habe WorldMap
bekam Klasse, die Funktion überschreibt paintComponent(Graphics g)
:Rotierendes Bild mit AffineTransform
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(mapa, 0, 0, getWidth(), getHeight(), null);
drawAirplanes(g2d);
}
Funktion drawAirplanes()
sieht wie folgt aus:
private void drawAirplane(Graphics2D g){
for(Samolot i: s){
i.rotateAirplane();
g.drawImage(i.getImg(),i.getX(),i.getY(),(int)i.getDim().getWidth(),(int)i.getDim().getHeight(), null);
}
}
Es ist einfach zu 1 müssen) drehen Flugzeug (BufferedImage innerhalb Flugzeug Objekt) 2) ziehen ihm.
Meine Airplane.rotateAirplane() Funktion sieht wie folgt aus:
public void rotateSamolot() {
AffineTransform tx = new AffineTransform();
tx.translate(10,10); //10, 10 is height and width of img divide by 2
tx.rotate(Math.PI/2);
tx.translate(-10,-10);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage newImage =new BufferedImage(20, 20, img.getType()); //20, 20 is a height and width of img ofc
op.filter(img, newImage);
this.img = newImage;
}
OFC wenn im mein Programm nur mapa
Objekt läuft gezogen wird. wenn im diese Spur zu löschen
this.img = newImage;
Ich habe zu OFC mein Flugzeug bekam aber nicht gedreht.
Ich bin nicht sicher Wenn Sie die AffineTransform übersetzen möchten, sollten Sie stattdessen die Rotationspunkte mit der rotate-Methode angeben, die normalerweise der Mittelpunkt ist, aber das liegt an Ihnen. Ich würde auch nicht das Ergebnis der Rotation zurück auf das Master-Bild zuweisen, sonst Sie bis die Drehung compounding .... – MadProgrammer
Ich "denke" im Grunde, was passiert, ist Ihr Bild wird "out of bounds" des verfügbaren Speicherplatzes gedreht ... – MadProgrammer
Sie könnten sich dieses Beispiel ansehen (http://stackoverflow.com/questions/15779877/rotate-bufferedimage-inside-jpanel/15780090#15780090) – MadProgrammer