2014-10-19 57 views
0

我建立了一個小程序來操縱一對夫婦RGB陣列和隨後的圖像,以及我在考慮我的旋轉算法的煩惱,RGB操作,旋轉算法

這是我的旋轉算法,

public void rotateRight() { 
    RGBColor[][] mirror = new RGBColor[h][w]; 
     for(int i = 0 ; i < h; i++){ 
       for(int j = 0 ; j < w; j++){ 
        int b = pixel[j][h-i-1].getBlue(); 
        int g = pixel[j][h-i-1].getGreen(); 
        int r = pixel[j][h-i-1].getRed(); 
        mirror[i][j] = new RGBColor(r,g,b); 
       } 
      } 
     pixel = mirror; 
    } 

這是工作的罰款平方的圖片,但對於非方擔當這樣的:

它從去

到:

enter image description here

相反旋轉的實際圖片的權利,並提供新的層面,我有不知道是什麼原因引起的,什麼都試過了。

回答

0

當處理的圖像時,錯誤的最頻繁的源是寬度和高度參數的反轉。這也是你的問題的答案!在第一個片段中交換hw應該修復它。請注意,您可能已經猜到了,因爲你注意到它正在爲方形的圖像而不是長方形的,這隻能有一個解釋......

下面的代碼片段執行你想使用BufferedImage旋轉:

public static void main(String[] args) throws IOException { 
    BufferedImage input = ImageIO.read(Test.class.getResource("input.png")); 
    int w = input.getWidth(); 
    int h = input.getHeight(); 

    BufferedImage output = new BufferedImage(h,w,BufferedImage.TYPE_INT_RGB); 
    for (int i=0 ; i<h ; i++) 
     for (int j=0 ; j<w ; j++) 
      output.setRGB(i,j,input.getRGB(j,h - i - 1)); 
    ImageIO.write(output,"png",new File("output.png")); 
} 

由於您似乎對您的陣列使用相同的約定,因此它也可能適用於您。

+0

你可以添加一些代碼或者指定哪個'w'和'h'他應該與哪個交換。在這種情況下,我認爲將'i 2014-10-19 16:24:49

+0

是的,但是,如果我使用這個代碼,http://pastebin.com/f2rYY0DJ,我可以讓它在兩種類型的圖像上工作,但它不像它應該那樣工作,它只反轉非平方的方向,而不是順時針旋轉它,並抓住一個新的寬度和高度,我也試過,似乎沒有工作:<。 thx man – bknight 2014-10-19 16:25:35

+0

你在第一個代碼段的很多地方交換索引,你必須修復所有這些,讓你的代碼工作 – Dici 2014-10-19 16:30:47