J'ai essayé de faire pivoter une image en Java en utilisant setRGB
et BufferedImage
, mais j'obtiens un résultat étrange. Quelqu'un at-il une idée pourquoi? Du côté GAUCHEBufferedImage setRGB résultat étrange
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"));
est l'image originale et dans la partie droite c'est mon résultat. Avez-vous une idée de comment puis-je le réparer?
Merci pour votre aide.
Vous ne pouvez pas faire pivoter une image en place. Vous faites une autre image pivotée séparée. Si vous voulez faire pivoter une image de 90 degrés, vous n'avez pas à effectuer de rotation. Copiez simplement la coordonnée x dans la nouvelle coordonnée y et la coordonnée y dans la nouvelle coordonnée x. –