BufferedImage drehen, falsch positioniert

Opi3

Aktives Mitglied
Hallo,
ich versuche ein BufferedImage um 45° um die z-Achse zu drehen und dann um 45° um die x-Achse.

Das drehen um die x Achse mache ich, indem ich die Höhe des Bildes einfach mit 0.5 Skaliere.

Das ganz soll ein kleines Hilfsprogramm werden, um aus 100px*100px Bildern Isometrisch Tiles zu machen.

Das Ganze funktioniert auch, aber:

Das Bild wird am ende an der Falschen Position gezeichnet:

Ausgangs Bild:
attachment.php


Das Bild das raus kommt:
(Ohne Alpha, damit man die Größe des Bildes sieht)
attachment.php


Die Funktion, in der der Fehler auftritt.

Java:
	private static BufferedImage rotateImage(BufferedImage src, double degrees) {
		
		int width;
		int height;
		
		Point urs = new Point(src.getWidth() / 2,src.getHeight() / 2);
		
		Point p1 = rotatepoint360(new Point(),urs,degrees);
		Point p2 = rotatepoint360(new Point(src.getWidth(),src.getHeight()),urs,degrees);
		
		height = (int) (p2.getY() - p1.getY());
		
		Point p3 = rotatepoint360(new Point(0,src.getHeight()),urs,degrees);
		Point p4 = rotatepoint360(new Point(src.getWidth(),0),urs,degrees);
		
		width = (int) (p4.getX() - p3.getX());
		
		AffineTransform affineTransform = AffineTransform.getRotateInstance(
				Math.toRadians(degrees), src.getWidth() / 2,
				src.getHeight() / 2);
		BufferedImage rotatedImage = new BufferedImage(width,
				height, BufferedImage.TYPE_3BYTE_BGR);
		Graphics2D g = (Graphics2D) rotatedImage.getGraphics();
	    
		g.setTransform(affineTransform);
		g.drawImage(src, 0, 0, null);
		return rotatedImage;
	}

Mir ist bewusst, das sie dringend Refactoring benötigt, es geht momentan aber nur um einen Versuch, wie es klappen könnte.

Also, ich wer dankbar, wenn mir jemand sagen könnte, warum das Tile verschoben gezeichnet wird.

Wer mit hilft bekommt als Belohnung ein Fettes

Danke*
*verkleinerte Abbildung ;)
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Java:
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class ImageRotateTest
{
    public static void main(String[] args) throws IOException
    {
        BufferedImage image = ImageIO.read(new File("images3.jpg"));
        BufferedImage result = rotateImage(image, 45);
        JFrame f = new JFrame();
        ImageIcon i = new ImageIcon(result);
        f.getContentPane().add(new JLabel(i));
        f.pack();
        f.setVisible(true);
    }
    

    private static BufferedImage rotateImage(BufferedImage src, double degrees)
    {
        double w = src.getWidth();
        double h = src.getHeight();
        double sw = Math.ceil(src.getWidth() * Math.sqrt(2));
        double sh = Math.ceil(src.getHeight() * Math.sqrt(2) / 2);
        AffineTransform affineTransform = new AffineTransform();
        affineTransform.translate(sw/2, sh/2);
        affineTransform.scale(1,0.5);
        affineTransform.rotate(Math.toRadians(degrees));
        affineTransform.translate(-w/2, -h/2);
        BufferedImage rotatedImage = new BufferedImage((int)sw, (int)sh, BufferedImage.TYPE_INT_BGR);
        Graphics2D g = (Graphics2D)rotatedImage.createGraphics();
        g.setTransform(affineTransform);
        g.drawImage(src, 0, 0, null);
        g.dispose();
        return rotatedImage;
    }
}

Funktioniert halt erstmal nur vernünftig für 45°, aber ... vielleicht reicht's ja
 

Opi3

Aktives Mitglied
********
Edit: Wollte ich eigentlich noch gar nicht abschicken.
Eventuell kann diesen Post jemand Löschen?
Das der hier schon steht, ist mir leider zu spät aufgefallen...
Opi3
 
Zuletzt bearbeitet:

Opi3

Aktives Mitglied
Und hier das versprochene
DANKE.
Ich weiß ist nicht viel,
tut mir Leid.


Opi3...
... einfach zu Api-Unsicher :autsch:
 

Opi3

Aktives Mitglied
Ich versuche 'meine' (;)) Funktionen immer so allgemein wie Möglich zu halten,
für den jetzigen Anwendungsfall reichen die 45 Grad aber
da es nur darum geht, die Bodenkacheln für mein Spiel von den 100px*100px gif'f in das 'Tile-format' zu konvertieren.

Vielen Dank nochmal,
Opi3
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Mr.Strobel BufferedImage Exportieren Eclipse Java Basics - Anfänger-Themen 14
A BufferedImage zeigt nur schwarz Java Basics - Anfänger-Themen 3
A BufferedImage Pixel Java Basics - Anfänger-Themen 7
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
T BufferedImage in Jar Java Basics - Anfänger-Themen 8
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
S BufferedImage heller/dunkler machen mit RescaleOp Java Basics - Anfänger-Themen 2
D Jpg in BufferedImage Reader oder Array ablegen? Java Basics - Anfänger-Themen 5
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
S BufferedImage Java Basics - Anfänger-Themen 2
Ernesto95 BufferedImage Teilbereich wieder transparent setzen Java Basics - Anfänger-Themen 16
M BufferedImage performant einlesen Java Basics - Anfänger-Themen 5
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
H BufferedImage DPI verändern Java Basics - Anfänger-Themen 5
S jpeg bzw bufferedimage als PDF Speichern Java Basics - Anfänger-Themen 13
W von Graphics in BufferedImage Java Basics - Anfänger-Themen 10
H BufferedImage Java Basics - Anfänger-Themen 5
F BufferedImage aus short[][][] Java Basics - Anfänger-Themen 3
Luk10 NPE bei BufferedImage[] Java Basics - Anfänger-Themen 4
S BufferedImage mit farbwerten füllen Java Basics - Anfänger-Themen 11
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
P BufferedImage als raw speichern Java Basics - Anfänger-Themen 3
C BufferedImage + Popup/Overlay Java Basics - Anfänger-Themen 2
E BufferedImage drucken Java Basics - Anfänger-Themen 3
R BufferedImage in JLabel Java Basics - Anfänger-Themen 2
G Serialisiertes BufferedImage wieder einlesen Java Basics - Anfänger-Themen 13
G Jpanel -> BufferedImage konvertieren Java Basics - Anfänger-Themen 7
G BufferedImage in Applet laden Java Basics - Anfänger-Themen 8
Q BufferedImage aus Bild in jar Java Basics - Anfänger-Themen 2
? BufferedImage löschen Java Basics - Anfänger-Themen 4
F Farben eines ganzen BufferedImage invertieren Java Basics - Anfänger-Themen 2
K Graphics2D und BufferedImage Java Basics - Anfänger-Themen 3
D wie kann ich ein BufferedImage komprimieren? Java Basics - Anfänger-Themen 7
reibi TIFF nach BufferedImage wandeln Java Basics - Anfänger-Themen 72
reibi Farbiges BufferedImage umwandeln zu 2farbig SchwarzWeiss Java Basics - Anfänger-Themen 7
E nullpointer bei BufferedImage Java Basics - Anfänger-Themen 2
M BufferedImage erzeugt OutOfMemoryError Java Basics - Anfänger-Themen 10
B Vorteil von Graphic2D und BufferedImage? Java Basics - Anfänger-Themen 6
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
X Image nach BufferedImage wandeln ? Java Basics - Anfänger-Themen 9
T BufferedImage kopieren Java Basics - Anfänger-Themen 6
G Image -> BufferedImage Java Basics - Anfänger-Themen 4
M Image/BufferedImage Java Basics - Anfänger-Themen 4
T Multiple BufferedImage Java Basics - Anfänger-Themen 3
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
N Bild drehen Java Basics - Anfänger-Themen 3
R Java ImageIcon drehen Java Basics - Anfänger-Themen 6
R Image drehen Java Basics - Anfänger-Themen 1
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
I String um 90 Grad drehen Java Basics - Anfänger-Themen 17
B Erste Schritte Drehen in Graphics2d Java Basics - Anfänger-Themen 2
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
P Vektor im R3 drehen? Java Basics - Anfänger-Themen 14
A Array drehen Java Basics - Anfänger-Themen 2
S Drehen RGB Würfel Java Basics - Anfänger-Themen 18
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
L Array drehen Java Basics - Anfänger-Themen 8
S Drehen eines Pfeils im Flug Java Basics - Anfänger-Themen 10
F Bild drehen Java Basics - Anfänger-Themen 9
A Javaspiel im Handy mit Drehen Java Basics - Anfänger-Themen 12
A Grafik2d Objekte drehen, Idee da, Problem in Umsetzung Java Basics - Anfänger-Themen 3
A Denkanstoß: Drehen eines Bildes (Matrix) Java Basics - Anfänger-Themen 5
S JPG drehen, skalieren und speichern Java Basics - Anfänger-Themen 15
D Image drehen Java Basics - Anfänger-Themen 6
S Zeichnung drehen Java Basics - Anfänger-Themen 13
H Drehen von Label Java Basics - Anfänger-Themen 2
R 2dimensionales array um 90 grad drehen Java Basics - Anfänger-Themen 2
T Bild drehen + richtige größe berechnen Java Basics - Anfänger-Themen 4
J Kann man ein JFrame/JWindow 90/-90 drehen? Java Basics - Anfänger-Themen 9
B array drehen Java Basics - Anfänger-Themen 11
G Aufgabe rekursiv Zahlen drehen Java Basics - Anfänger-Themen 5
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
O Warum ist die Auswahl falsch? Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
Kapfski Was habe ich falsch gemacht? Hilfe! Java Basics - Anfänger-Themen 17
R FXMLLoader Pfad falsch`? Java Basics - Anfänger-Themen 4
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
J String wird in GUI falsch ausgegeben Java Basics - Anfänger-Themen 10
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
J Was mache ich falsch in meiner Java Anwendung? Java Basics - Anfänger-Themen 11
N Javac -version der Befehl ist entweder falsch geschrieben oder...... Java Basics - Anfänger-Themen 8
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
A Ich habe das Gefühl etwas grundlegendes falsch zu machen Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
M Was ist daran falsch Java Basics - Anfänger-Themen 2
A Arrays addieren- Was mache ich falsch?? Java Basics - Anfänger-Themen 2
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
L AES - Irgendwas falsch? Java Basics - Anfänger-Themen 0
H Koordinaten gehen falsch ! Java Basics - Anfänger-Themen 13
I Programm von mir - keine Ahnung mehr ob richtig falsch:-( Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben