2014-10-19 56 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