Hallo Leute!
Wie der Titel schon sagt möchte ich ein Bild rotieren. Das Problem ist jetzt jedoch, dass mir nicht die AWT, Swing und JavaFX Klassen zur Verfügung stehen und ich an Java 5 gefesselt bin.
Das heisst ich muss mir meine eigene Bild-Klasse schreiben und die ganzen Algorithmen die ich brauche ebenfalls selber schreiben.
Momentan speichere ich Bilder in einem Zweidimensionalen Integer Array. In diesem Raster werden die Farben im Format ARGB gehalten.
Bis jetzt habe ich den folgenden Algorithmus:
Das Funktioniert auch schon ganz gut.... Allerdings nur wenn ich das Bild um 90, 180 oder 270 Grad drehen möchte. Wenn ich das Bild nun um 45° drehen möchte kommt folgendes dabei raus: {siehe Anhang}
Es befinden sich schwarze Punkte überall im Bild. Ich habe jetzt schon mindestens 'ne Stunde gesucht und konnte nicht herausfinden wie ich das Verhindern kann.
Hat jemand eine Idee wie ich den Algorithmus abändern/erweitern muss damit ich kein Problem mit diesen toten Punkten bekomme?
Wie der Titel schon sagt möchte ich ein Bild rotieren. Das Problem ist jetzt jedoch, dass mir nicht die AWT, Swing und JavaFX Klassen zur Verfügung stehen und ich an Java 5 gefesselt bin.
Das heisst ich muss mir meine eigene Bild-Klasse schreiben und die ganzen Algorithmen die ich brauche ebenfalls selber schreiben.
Momentan speichere ich Bilder in einem Zweidimensionalen Integer Array. In diesem Raster werden die Farben im Format ARGB gehalten.
Bis jetzt habe ich den folgenden Algorithmus:
Java:
public SimpleImage rotate(int width, int height, int rotationCenterX, int rotationCenterY, double degrees) {
int imgWidth = this.data.length;
int imgHeight = this.data[0].length;
double radians = Math.toRadians(degrees);
int[][] data = new int[width][height];
for(int x = 0; x < imgWidth; x++) {
for(int y = 0; y < imgHeight; y++) {
int newX = (int)(Math.cos(radians) * (x - rotationCenterX) - Math.sin(radians) * (y - rotationCenterY) + rotationCenterX);
int newY = (int)(Math.sin(radians) * (x - rotationCenterX) + Math.cos(radians) * (y - rotationCenterY) + rotationCenterY);
try {
data[newX][newY] = this.data[x][y];
} catch(ArrayIndexOutOfBoundsException exception) {}
}
}
return new SimpleImage(data);
}
Das Funktioniert auch schon ganz gut.... Allerdings nur wenn ich das Bild um 90, 180 oder 270 Grad drehen möchte. Wenn ich das Bild nun um 45° drehen möchte kommt folgendes dabei raus: {siehe Anhang}
Es befinden sich schwarze Punkte überall im Bild. Ich habe jetzt schon mindestens 'ne Stunde gesucht und konnte nicht herausfinden wie ich das Verhindern kann.
Hat jemand eine Idee wie ich den Algorithmus abändern/erweitern muss damit ich kein Problem mit diesen toten Punkten bekomme?