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 😛
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das große problem (ich kann sehen) ist die übersetzung des
Graphics
Kontext, der offset der position, die die Drehung stattfindet.Ich "glaube" rotation standardmäßig erfolgt am oberen/linken Ecke des
Graphics
Umfeld (wo es 0 x 0 position ist, die man übersetzt habe, um etwas anderes), dies könnte verursacht werden, die das Bild gedreht werden soll out-of-frame (oder sichtbaren Bereich)Sollten Sie eine "Anker" - Punkt, wo die Drehung stattfindet, in der Regel, das Zentrum ist meine persönliche Präferenz.
Folgenden Beispiel hat einfach ein master-image (wegen der Größe Einschränkungen, die ich hatte, um es zu skalieren, aber Sie können nicht brauchen diese). Dann verwende ich diese zu generieren "gedreht" - Instanz, die Größe zu ermöglichen, das Bild zu passen in in. Dies ist eine Menge Spaß mit trig - ich habe den code von irgendwo, also Gutschrift auf die Entwickler.
Beispiel können Sie klicken Sie auf, wo jeder und es wird sich ändern, Drehpunkt, so dass Sie sehen können, was Los ist. Die Standard-position ist die Mitte des Bereichs...
Dies ist was für mich gearbeitet (irgendwie kopieren von hier und da):