2015-12-03 3 views
1

Я пытаюсь вертикально отразить pixmap, который у меня есть на Java; вот мой код:Вертикальное зеркальное отображение изображения в Java

Dimension coords = pixmap.getSize(); 
for (int x = 0; x < coords.width; x++) { 
    for (int y = 0; y < coords.height; y++) { 
     Color newest = pixmap.getColor(-x, y); 
     pixmap.setColor(x, y, 
      new Color(newest.getRed(), 
         newest.getGreen(), 
         newest.getBlue())); 
    } 
} 

«пиксельный» является параметром этого метода экземпляра, и это по существу образ, который загружен. Вот ошибка времени я получаю, когда я пытаюсь перевернуть изображение:

Исключение в потоке «АВТ-EventQueue-0» java.lang.ArrayIndexOutOfBoundsException: координата вне границ!

Любые советы? Благодаря!

** EDIT **

Я изменил код так:

Dimension coords = pixmap.getSize(); 
for (int x = 0; x < coords.width; x++) { 
    for (int y = 0; y < coords.height; y++) { 
     Color newest = pixmap.getColor(x, y); 
     if (x < coords.width/2) { 
      pixmap.setColor(((((coords.width/2) - x) * 2) + x), y, 
      new Color(newest.getRed(), 
         newest.getGreen(), 
         newest.getBlue())); 
     } else { 
     pixmap.setColor((x - (((x - (coords.width/2)) * 2))), y, 
      new Color(newest.getRed(), 
         newest.getGreen(), 
         newest.getBlue())); 
     } 
    } 
} 

и я все еще получаю то же самое из-за исключения ограничивающей; не знаю, где я ошибся на этом фрагменте кода.

+0

Итак, '-100' находится в пределах изображения как? – MadProgrammer

+0

@MadProgrammer О, ничего себе не думал об этом, я просто думал о координатах и ​​просто пытался перевернуть его по оси Y. Любые советы о том, как я могу это сделать, учитывая все значения x от 0 до coords.width, являются положительными? – Rohan

+0

'coords.width - x'? Но вы только хотите сделать половину ширины. Помните, вам нужно поменять пиксели – MadProgrammer

ответ

0

Java дает вам исключение из пределов границ. Вы пытаетесь получить доступ к пикселю, который не существует в пределах заданного размера массива.

Цвет новейший = pixmap.getColor (-x, y);

это, скорее всего, проблема.
pixmap - это двумерный массив. Несмотря на то, что я не знаком с классом он, вероятно, выглядит следующим образом:

//or whatever your screen is 
int pixels[900][900]; 

, как говорится, ваш код пытается получить доступ к отрицательным й значению координат массива.

EDIT:

Dimension coords = pixmap.getSize(); 
for (int x = 0; x < coords.width; x++) { 
for (int y = 0; y < coords.height; y++) { 
    pixmap.setColor(x, y, 
     new Color(newest.getRed(), 
        newest.getGreen(), 
        newest.getBlue())); 
} 
    } 

Im будет считать этот код будет использовать изображение, поэтому

Dimension coords = pixmap.getSize(); 
for (int x = 0; x < coords.width; x++) { 
for (int y = 0; y < coords.height; y++) { 
    pixmap.setColor(coords.width-x, y, 
     new Color(newest.getRed(), 
        newest.getGreen(), 
        newest.getBlue())); 
} 
    } 

должен нарисовать изображение переворачивается на оси х. Вероятно, вы можете увидеть остальное отсюда

+0

Я попробовал coords.width - x, но, к сожалению, все же дал мне то же самое исключение – Rohan

1

Альтернативное решение - использовать Graphics2D с отрицательной вертикальной шкалой, чтобы сделать щелчок для вас ... Обратите внимание, что это должно быть в сочетании с переводом (0, -хейт) на верните изображение в середину.

public static void main(String[] args) throws IOException { 
    BufferedImage image = ImageIO.read(new File("test.jpg")); 

    BufferedImage mirrored = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 

    Graphics2D graphics = (Graphics2D)mirrored.getGraphics(); 
    AffineTransform transform = new AffineTransform(); 
    transform.setToScale(1, -1); 
    transform.translate(0, -image.getHeight()); 
    graphics.setTransform(transform); 
    graphics.drawImage(image, 0, 0, null); 

    ImageIO.write(mirrored, "jpg", new File("test-flipped.jpg")); 
} 
+0

Это отличное решение, и я бы это сделал, но, к сожалению, я ограничился использованием того, что у меня было выше для это конкретное задание: /. В любом случае, спасибо! – Rohan

Смежные вопросы