Rotierende Bild mit AffineTransform

Habe ich Klasse namens Airplane. Innerhalb dieser Klasse habe ich die variable img was ist ein BufferedImage geben. Was ist mehr, ich habe Klasse WorldMap die overrides-Funktion paintComponent(Graphics g):

@Override
public void paintComponent(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(mapa, 0, 0, getWidth(), getHeight(), null); 
    drawAirplanes(g2d);
}

Funktion drawAirplanes() wie folgt Aussehen:

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 einfach nur brauchen, um 1) drehen, Flugzeug (BufferedImage-innen Flugzeug-Objekt) 2) zeichnen Sie ihn.

Mein Flugzeug.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 ich mit meinem Programm nur mapa Objekt gezeichnet. wenn ich löschen diese Spur

this.img = newImage;

hab ich ofc mein Flugzeug auch, aber nicht gedreht.

  • Ich bin mir nicht sicher, das Sie übersetzen möchten die AffineTransform, sollten Sie stattdessen, liefern die rotation Punkte mit der rotate-Methode, die in der Regel ist der Mittelpunkt, aber das ist bis zu Ihnen. Ich würde auch nicht zuordnen das Ergebnis der Drehung zurück auf das master-image sonst bis Compoundierung der rotation....
  • Ich "glaube" grundsätzlich das, was geschehen ist, ist Ihr Bild gedreht wird "out of bounds" von den verfügbaren Platz...
  • Sie konnte werfen Sie einen Blick auf dieses Beispiel
  • ich habe vergessen zu speichern orginal Bild - das ist wahr. aber immer noch nicht verstehe, wie kann ich richtige mein code nicht drehen Sie es außerhalb der Grenzen meines Raumes. irgendwelche Ideen? ofc-ich werde einen Blick auf diesen link in ein paar sec
  • 15 Fragen gestellt. Nicht eine einzige Antwort akzeptiert. Sie offensichtlich nicht zu schätzen wissen, die Ihnen helfen, auf die Fragen, so dass ich denke, ich werde dieses überspringen.
  • Kann ich akzeptieren, beantworten, wenn ich weniger als 15 rep Punkt? Jedes mal wollte ich zu Stimmen, bis diese Antwort, die hilft mir am meisten, aber ich coulnt mit weniger als 15 rep. wenn ich kann "akzeptieren" der Antwort im Total Leid für alle, die das Taten, bekam seine Antwort akzeptiert.
  • Ich würde sagen, dass Sie Probleme haben, die übersetzung (die ich habe nicht verbrachte viel Zeit mit der Suche an) und nicht liefern Ansatzpunkte für die rotation, die ich "glaube" wird standardmäßig auf der oberen/linken Ecke
  • Ein weiterer example,, das ist ein wenig off-topic, aber zeigt Bild drehen...
  • Ihr waren Sie zu 100% sicher. problem war, dass 2 Punkte der übersetzung. ich missverstanden Beispiele und verwenden Sie es falsch koordiniert. im nicht sicher, ob ich posten sollte, meine Antwort für dieses problem, wenn nicht, Thema kann geschlossen werden. danke MadProgrammer wieder, sorry für camickr und anderen nicht geschätzt, durch meine person Völker
  • Ich habe ein Beispiel, das ist eine Art Kombination von mindestens zwei der Beispiele, die ich bereits vorher gepostet, nicht das genaue Beispiel, das ich wollte, aber es ist alles, was ich hatte Zeit, Sie zu erstellen 😛

InformationsquelleAutor fa1thly | 2013-11-28
Schreibe einen Kommentar