2013-03-14 157 views
3

我有一个项目,我必须以多种方式处理图像。我困在像素化。Java图像处理

对于像素化,我必须使用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','Photograph' ..?为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。 2)'}}}}''为代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。 – 2013-03-14 04:25:29

+0

马上就要加上100个像素的颜色值,但只除以10个。“Pixel(r,g,b)”的值是大约10倍的值吗? – 2013-03-14 04:34:07

+0

}}}}真的让你觉得你更喜欢用Python编程XD – Patashu 2013-03-14 04:44:17

回答

0

你有几个在那里的错误。 您不重置每个块之间的红绿蓝色值, 好的做法是只有变量可用于它们需要的范围 。

间歇使用间歇。

另外,正如你指出的,你没有正确地获得平均值,你也可能想考虑四舍五入的问题,这段代码被截断。

有一点要注意的是,红绿蓝有时可以整数 有时浮动,如果你把它们混合起来,你会得到问题。

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 2013-03-14 04:44:44