Ich habe versucht, ein Bild in Java mit setRGB
und BufferedImage
zu drehen, aber ich bekomme ein seltsames Ergebnis. Hat jemand eine Idee warum?BufferedImage setRGB seltsames Ergebnis
BufferedImage pic1 = ImageIO.read(new File("Images/Input-1.bmp"));
int width = pic1.getWidth(null);
int height = pic1.getHeight(null);
double angle = Math.toRadians(90);
double sin = Math.sin(angle);
double cos = Math.cos(angle);
double x0 = 0.5 * (width - 1); // point to rotate about
double y0 = 0.5 * (height - 1); // center of image
BufferedImage pic2 = pic1;
// rotation
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
double a = x - x0;
double b = y - y0;
int xx = (int) (+a * cos - b * sin + x0);
int yy = (int) (+a * sin + b * cos + y0);
if (xx >= 0 && xx < width && yy >= 0 && yy < height) {
pic2.setRGB(x, y, pic1.getRGB(xx, yy));
}
}
}
ImageIO.write(pic2, "bmp", new File("Images/Output2.bmp"));
In LEFT Seite ist das Originalbild und in der RIGHT Seite ist es mein Ergebnis. Hat jemand eine Idee wie ich das beheben kann?
Danke für Hilfe.
Sie können ein Bild nicht an Ort und Stelle drehen. Sie machen ein weiteres gedrehtes Bild. Wenn Sie ein Bild um 90 Grad drehen möchten, müssen Sie die Rotate-Berechnung nicht durchführen. Kopieren Sie einfach die x-Koordinate in die neue y-Koordinate und die y-Koordinate in die neue x-Koordinate. –