2013-03-14 110 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