Я попытался повернуть изображение на Java с помощью setRGB
и BufferedImage
, но я получаю странный результат. Кто-нибудь знает, почему?BufferedImage setRGB странный результат
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"));
В стороны ЛЕВОЙ является исходным изображением, а в стороне RIGHT это мой результат. У кого-нибудь есть идеи, как я могу это исправить?
Спасибо за помощь.
Вы не можете повернуть изображение на свое место. Вы делаете другое отдельное повернутое изображение. Если вы собираетесь поворачивать изображение на 90 градусов, вам не нужно делать математику с вращением. Просто скопируйте координату x в новую координату y и координату y с новой координатой x. –