BufferedImage setRGB странный результат

Я пытаюсь повернуть изображение в Java с помощью setRGB а также BufferedImage, но я получаю странный результат. Кто-нибудь знает, почему?

 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"));

На левой стороне оригинальная картинка, а на правой - мой результат. Кто-нибудь есть идеи, как я могу это исправить? введите описание изображения здесь

Спасибо за помощь.

1 ответ

Решение

Проблема в том, что вы используете одно и то же изображение для ввода и вывода:

BufferedImage pic2 = pic1;

Вы должны создать другое изображение для pic2, а затем сделать поворот, копируя пиксели из Image1 в Image2.

Обратите внимание, однако, что с помощью getRGB и setRGB это ужасно медленно. Это в 100 раз быстрее, если вы манипулируете пикселями напрямую.

Другие вопросы по тегам