2015-09-16 2 views
0

Я пытаюсь перевернуть изображение в java, но у меня возникла проблема, которую я просто не могу понять.Перевернув изображение в java

Используя двойной цикл for, я просматриваю все пиксельные значения в изображении org и копируя их в новое изображение в пикселе (width-x-1, y).

На следующем рисунке изображено, что происходит, когда я запускаю метод.

http://tinypic.com/r/nqzsiu/8

Новое изображение, кажется, только пробежать 1/10 высоты изображения»по какой-то причине. Почему это и как я могу это исправить?

private Image img; 
private Pixel pixel; 
private Image newimg; 
private Pixel newpixel; 

public advancedFilters(Image img) 
{ 
    this.img = img; 
} 

public Image Mirror(){ 
    newimg = new Image(img.getWidth(), img.getHeight(), "newimage"); 
    int curtone; 
    for (int j=0; j<img.getHeight(); j++) { 
     for (int i=0; i<img.getWidth(); i++) { 
      pixel = img.getPixel(i,j); 
      curtone = pixel.getValue(); 
      newpixel = newimg.getPixel(newimg.getWidth()-i-1, j); 
      newpixel.setValue(curtone); 

     } 
    } 
    return newimg; 
} 
+0

Вы уверены, что 'img.getHeight()' возвращает правильную высоту? – crea1

+0

Что такое изображение? Это не может быть java.awt.Image, поскольку он использует этот конструктор. –

+0

Его .jpg, а yeah - img.getHeight() возвращает высоту, как и должно было –

ответ

1

Почему вы хранения временных значений private Pixel pixel и private Pixel newpixel вне сферы, где они используются? Это необязательно (из кода, который вы указали как минимум), и просит о проблемах. Попробуйте выполнить эту реализацию своего алгоритма (который выглядит правильно):

private Image img; 
private Pixel pixel; 
private Image newimg; 
private Pixel newpixel; 

public advancedFilters(Image img) 
{ 
    this.img = img; 
} 

public Image Mirror(){ 
    newimg = new Image(img.getWidth(), img.getHeight(), "newimage"); 
    for (int j=0; j<img.getHeight(); j++) { 
     for (int i=0; i<img.getWidth(); i++) { 
      Pixel oldPixel = img.getPixel(i,j); 
      int oldPixelVal = oldPixel.getValue(); 
      Pixel mirrorPixel = newimg.getPixel((newimg.getWidth()-i-1), j); 
      mirrorPixel.setValue(curtone); 

     } 
    } 
    return newimg; 
} 
+0

Это не привело к чему-то другому, кроме того же результата. Может ли проблема находиться внутри самого класса Image? Я не вижу этого, видя, что, используя тот же алгоритм для инвертирования цветов, например, результаты корректно. Любые другие идеи, что может быть причиной этого? –

+0

Хорошо, что есть несколько мест, которые нужно проверить. Во-первых, убедитесь, что ваши переменные 'i' и' j' фактически увеличивают весь путь до 'img.getWidth()' и 'img.getHeight()'. Если они это сделают, попробуйте написать newimg в файл и открыть его самостоятельно, проблема может заключаться в том, как вы показываете newimage в java. – Gnarlywhale

+0

Нашли ошибку. Забыл включить метод, который я сделал для обновления изображения в соответствии с измененными пикселями. Спасибо за вашу помощь, хотя! –

0

Это не полный вопрос. Вам просто нужно вызвать newImg.pixelsUpdated(); прежде чем вы его вернете. Но нет способа, которым пользователи StackOverflow могут это знать.