2013-05-20 2 views
0

Я пытаюсь сделать функцию, которая переворачивает по горизонтали заданное изображение. Обработка, как вы знаете, использует тип PImage.ArrayOutOfBoundsException в редактировании изображений

Вот что я хочу:

PImage reverseHorOf(PImage toReverse){ 
    PImage toReturn = createImage(toReverse.width, toReverse.height, ARGB); 
    toReturn.loadPixels(); 
    toReverse.loadPixels(); 
    for(int i = 0; i < toReverse.height; i ++) 
    for(int j = 0; j < toReverse.width; j ++) 
     toReturn.pixels[(i * width) + (width - 1 - j)] = toReverse.pixels[(i * width) + j]; 
    toReverse.updatePixels(); 
    toReturn.updatePixels(); 
    return toReturn; 
} 

@ Java-только программистам:

  • createImage является "заменой" для new PImage;
  • loadPixels() и updatePixels() необходимы для [Вы не говорите?!?] Загружаете и обновляете пиксели изображения или кадра;
  • Мне нужно создать новый PImage по двум причинам: 1) значения синтаксиса; 2) Семантический смысл: я не могу скопировать все изображение, если я начинаю изменять его часть = P

So ребята, что я попытался является:

  • Возьмите ту же линию с (i * width);
  • Достигнуть снизу, начальное положение линии в toReturn;
  • Снимите нижнюю часть от начального положения линии в toReverse;

У меня есть ArrayOutOfBoundsException: 1499.

Я делаю ошибку, но ... где?

+2

'toReverse.pixels [(я * ширина) + J]' Вы должны проверить, что '(я * ширина) + j' не превышает размер массива (То же самое в '(i * width) + (width - 1 - j)'). – Maroun

+1

Что такое переменная 'width'? – Andremoniy

+0

Спасибо всем! 'width' - ширина рамки, я забыл использовать' toReverse.width' – ingroxd

ответ

1

Ваши формулы кажутся правильными в тотализаторе. Но единственная вещь, которая могла бы привести к указанному исключению здесь, неизвестна (для нас) переменной width. Кажется, эта переменная не связана с объектом toReverse и его размерностью. Я уверен, вы должны исправить это следующим образом:

toReturn.pixels[(i * toReverse.width) + (toReverse.width - 1 - j)] = toReverse.pixels[(i * toReverse.width) + j]; 
+0

Что ... Вы правы, я сожалею, что тратил ваше время! – ingroxd

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