2013-03-14 3 views
3

У меня есть проект, где я должен манипулировать изображением несколькими способами. Я застрял на пикселизации.Java Image Manipulation

Для пикселизации я должен взять набор пикселей 10x10 и вернуть одну ячейку, которая усредняла цвета RGB отдельно. В настоящее время все, что я получаю, - это красное изображение в моей программе бегунов. Спасибо за помощь.

public static Photograph pixelated(Photograph photo) { 
     int red = 0; 
     int green = 0; 
     int blue = 0; 
     int interval = 10; 
     Photograph p = null; 
     p = new Photograph(photo.getWidth(),photo.getHeight()); 
     for (int row=0; row<photo.getHeight(); row +=interval) { 
      for (int col=0; col<photo.getWidth(); col +=interval) { 

       for (int row2=row; row2<row+10; row2++) { 
        for (int col2=col; col2<col+10; col2++) { 
        red = red + photo.getPixel(col, row).getRed(); 
        green = green + photo.getPixel(col, row).getGreen(); 
        blue = blue + photo.getPixel(col, row).getBlue(); 
        } 
       } 
      red = red/interval; 
      green = green/interval; 
      blue = blue/interval; 

      Pixel rgb = new Pixel(red,green,blue); 
      for (int row3=0; row<interval; row++) { 
       for (int col3=0; col<interval; col++) { 
        p.setPixel(col3, row3, rgb); 
     }}}} 
     return p; 
     } 
+2

1) 'Pixel',' Фотография' ..? Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). 2) '}}}}' ???? Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы. –

+0

С самого начала вы добавляете значения цвета 100 пикселей, но делятся на 10. Что делает «Pixel (r, g, b)» со значениями, которые имеют значение около 10x? –

+0

}}}} действительно заставляет вас думать, что вы предпочитаете программировать на python XD – Patashu

ответ

0

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

Интервал использовался с перерывами.

Также, как указано, вы не получали среднее значение правильно, вы также можете рассмотреть вопросы округления, этот код усекает.

Одно из того, что нужно знать о том, что красный зеленый синий иногда может быть ints , а иногда и плавает, у вас появятся проблемы, если вы их примете.

public static Photograph pixelated(Photograph photo) { 
    int interval = 10; 
    Photograph p = null; 
    p = new Photograph(photo.getWidth(),photo.getHeight()); 
    for (int row=0; row<photo.getHeight(); row +=interval) { 
     for (int col=0; col<photo.getWidth(); col +=interval) { 
      // declare and reset variables here 
      int red = 0; 
      int green = 0; 
      int blue = 0; 

      for (int row2=row; row2<row+interval; row2++) { 
       for (int col2=col; col2<col+interval; col2++) { 
        // i assume these functiosn return an int 0 <= x < 256 ? 
        red = red + photo.getPixel(col, row).getRed(); 
        green = green + photo.getPixel(col, row).getGreen(); 
        blue = blue + photo.getPixel(col, row).getBlue(); 
       } 
      } 
      // you have a square not a line 
      red = red/(interval * interval); 
      green = green/(interval * interval); 
      blue = blue/(interval * interval); 

      // i assume this constructor takes ints 0 <= x < 256 ? 
      Pixel rgb = new Pixel(red,green,blue); 
      // interval needs to be used here 
      for (int row3=row; row3< row+interval; row3++) { 
       for (int col3=col; col3<col+interval; col3++) { 
        p.setPixel(col3, row3, rgb); 
       } 
      } 
     } 
    } 
    return p; 
} 
+3

Объясните, что вы изменили и почему, поэтому OP знает, что пошло не так, и почему – Patashu