image rotate, bild nicht mehr zu sehen

Status
Nicht offen für weitere Antworten.
M

muuh

Gast
also ich habe ein bild, das ich gern drehen möchte.

das graphics2D object kann ich nicht drehen, da ich das gedrehte bild, dann auf einen hintergrund zeichne und der sich sonst auch mitdrehen würde.

in der draw-Methode:
Code:
at.setToTranslation(getSpaceOccupied().x, getSpaceOccupied().y);
at.setToRotation(this.getAngle(), image.getWidth(null)/2, image.getHeight(null)/2);
at.rotate(this.getAngle());

Graphics2D g2d = (Graphics2D) g;
 g2d.drawImage(image, at, component);

So, das hintergrundbild wird angezeigt, aber von dem anderen bild keine spur...
ich hab versehentlich bei dem drehpunkt bei der höhe durch 2 zu dividieren vergessen, da hat man das bild noch am oberen rand ein wenig abgeschnitten gesehn...

getSpaceOccupied, is der punkt, wo sich das bild gerade befindet und dort soll es sich auch drehen, aber egal welche Werte ich für x und y angebe, es ist nicht zu sehen...

Ich bin für hilfe sehr dankbar!
 

Marco13

Top Contributor
Hi

setToTranslation(x,y) setzt die Matrix so, dass sie eine Verscheibung beschreibt. Wohin sie verschiebt, weiß man nicht, solange man nicht "getSpaceOccupied" kennt.

setToRotation(a,x,y) setzt die Matrix so, dass sie eine Rotation um den Punkt (x,y) beschreibt - aber die Translation, die du vorher gesetzt hast, ist dann wieder weg! Die Matrix beschreibt dann NURnoch diese Drehung.

rotate(a) verändert die Matrix: Zusätzlich(!) zur oben gesetzen Drehung um den Punkt (x,y) wird jetzt noch eine Drehung um den Ursprung gemacht.

Wenn du erst überlegst, und dann weißt, was du machen willst, dann kannst du dafür die richtig Lösung finden. Wenn du erst überlegts, und dann weißt, was du machen willst, und keine Lösung findest, sag nochmal bescheid.

bye
 
G

Guest

Gast
Marco13 hat gesagt.:
Hi

setToTranslation(x,y) setzt die Matrix so, dass sie eine Verscheibung beschreibt. Wohin sie verschiebt, weiß man nicht, solange man nicht "getSpaceOccupied" kennt.

setToRotation(a,x,y) setzt die Matrix so, dass sie eine Rotation um den Punkt (x,y) beschreibt - aber die Translation, die du vorher gesetzt hast, ist dann wieder weg! Die Matrix beschreibt dann NURnoch diese Drehung.

rotate(a) verändert die Matrix: Zusätzlich(!) zur oben gesetzen Drehung um den Punkt (x,y) wird jetzt noch eine Drehung um den Ursprung gemacht.

Wenn du erst überlegst, und dann weißt, was du machen willst, dann kannst du dafür die richtig Lösung finden. Wenn du erst überlegts, und dann weißt, was du machen willst, und keine Lösung findest, sag nochmal bescheid.

bye

ich will das Bild rotieren um den Mittelpunkt des Bildes, darum setToRotation, des müsst ja noch passen oda?
so, und wen des bild jetz rotiert ist, dann möchte ich es an eine bestimmte Position zeichnen. Muss ich da noch at.translate(position.x, position.y) dazutun?

weil das hätt ich gemacht, aber dann sieht ma wieder des gedrehte bild nicht. Wenn ich nur setToRotation nehmen, dann wird das Bild in die linke obere Ecke gezeichnet...
 

Marco13

Top Contributor
Hi

Offenbar ist noch ein Punkt nicht klar: Was man zuletzt hinschreibt, wird zuerst gemacht.
(Wie Mathematisch kann das hier werden?)

Die "AffineTransform" ist ja eine Matrix. Man kann eine Matrix mit einem Punkt multiplizieren. (Sozusagen auch "mit einem Punkt deines Bildes"). Das Ergebnis ist dann ein (verschobener, gedrehter, skalierter...) Punkt.

Wenn du nun zwei Matrizen (also zwei AffineTransforms) hast
T beschreibt eine Verschiebung (Translation)
R beschreibt eine Rotation
dann kannst du damit einen Punkt p entweder
- erst drehen und dann verschieben oder
- erst verschieben und dann drehen

fig3-4.gif

(von fly.cc.fer.hr/~unreal/theredbook/chapter03.html, Abschnitt "Thinking about Transformations")

Wenn du nun rechnest
at.setToIdentity();
at.rotate(a,x,y);
at.translate(x,y);
und das dann auf einen Punkt anwendest, ist das gleichbedeutend mit
R * T * p
Und wie du siehst: Der Punkt wird ERST verschoben. Und der verschobene Punkt wird dann rotiert. (Wenn man zu lange drüber nachdenkt, kriegt man leicht nen Knoten ins Hirn). Der Punkt wird sozusagen "von rechts nach links durch die Transformationen gereicht". Wenn du das Bild ERST um sein Zentrum rotieren, und DANN irgendwo hin verschieben willst, mußt du die Operationen genau umgekehrt ausführen:

Wenn du den Punkt p drehen willst, rechnest du
p' = R * p
Wenn du den gedrehten Punkt p' nun zusätzlich noch veschieben willst, rechnest du
p" = T * p'
Und wenn man sich das mal genau ansieht, steht da ja
p" = T * R * p

Man muß also erst T setzen, und dort dann R dranmultiplizieren.

at.setToTranslation(getSpaceOccupied().x, getSpaceOccupied().y);
at.rotate(this.getAngle(), image.getWidth(null)/2, image.getHeight(null)/2);

Das entspricht auch dem, was in der Doku zu setToRotation steht: Die "Nummerierung" der Zeilen ist dort S3, S2, S1 - und es wird S1, S2, S3 angewendet.

bye
 
M

muuh

Gast
Wenn die Mathematik so einfach bleibt, dann kann ruhig noch mehr davon kommen!

Also ich hab jetz at.setToTranslation(x, y) genommen und dann at.rotate(winkel).

Folgendes wäre noch interessant:
Wird hier um den Mittelpunkt des Bildes rotiert?

Wird durch setToTranslation(x,y) der Mittelpunkt des rotierten Bildes dort gesetzt?

Weil ich habe jetzt für x und y 200 eingegeben und wenn ich das vergleiche, dann passt das nicht, das Bild ist viel weiter unten als recht!

Außerdem muss ich mich mal bedanken für deine geduldigen Erklärungen! Vielen, vielen Danke!
 
M

muuh

Gast
ich bin ja auch so blöd (vielleicht sollt ich mehr schlafen, oder mir angewöhnen kaffee zu mögen ;-) )

Jetzt, hab ich doch tatsächlich bei rotate nur den Winkel angegeben und nicht den Rotationspunkt.
Jetzt, passt das nämlich auch mit 200, 200!

Jetzt wäre noch interessant, was der setToTranslatePunkt beschreibt (is vielleicht nicht gerade das richtige wort^^), also stellt das den mittelpunkt des bildes dar?
 
M

muuh

Gast
ich habe noch eine frage (tu tust mir schon richtig leid, aber du kannst das so schön erklärn, also bitte ich noch mal um hilfe)!

Das ganze soll ein Spiel werden, wo Käfer auf dem Bildschirm krabbeln. Ich habe das ganze einmal ohne rotation implementiert.
Ein Bild wurde als Rectangle interpretiert, somit konnte ich Kollisionen mit intersects abprüfen, nur scheinbar funktioniert das nicht mehr, wenn man das Bild einmal gedreht hat, hast du da eine Ahnung, wie ich das hinbiegen könnte?
 
G

Gast

Gast
so, aus es reicht, ich geh jetzt ins bett...
die funktion funktioniert schon noch, man muss halt die drehung berücksichtigen, manschmal überlappen sich die Käfer ein wenig oder fahren über den Rand hinaus, aber das liegt wohl daran, dass das bild gedreht ist, aber des werd ich schon irgendwie rausfinden, was ich da machen muss, aber sicher nicht mehr heute!

LG Edith
 

Marco13

Top Contributor
Hi

at.setToRotation(this.getAngle(), image.getWidth(null)/2, image.getHeight(null)/2);
(bzw. das entsprechende at.rotate(a,x,y))

Damit wird um den Punkt gedreht, der durch die X- und Y-Koordinaten beschreiben ist. Es ist eine Hintereinanderausführung von drei Operationen:
1. Man bewegt den Punkt, um den gedreht werden soll, in den Ursprung
2. Man dreht um den Ursprung
3. Man bewegt den Punkt, um den gedreht werden soll, wieder da hin, wo er vorher war.

(siehe auch den Letzen Link aus meinem Posting oben)

at.setToTranslation(getSpaceOccupied().x, getSpaceOccupied().y);
(bzw. at.translate(x,y))

Damit wird NUR die Verschiebung beschrieben. Ein Punkt, der Vorher bei (0,0) lag, liegt danach bei (x,y).

bye
 
M

muuh

Gast
danke mal, die letzte antwort, war zwar nicht die antwort auf des was ich wissen wollte, aber du hast mir sehr geholfen!
vielen, vielen danke, ich glaube den rest werde ich dann allleine schaffen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Speichern von Image als JPG auf Festplatte AWT, Swing, JavaFX & SWT 9
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
W Image in jar einbauen AWT, Swing, JavaFX & SWT 20
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben