Java:将图像旋转90度

时间:2016-05-13 16:08:07

标签: java image matrix rotation

我试图编写一种方法将图像向右旋转90度。我已经查看过有关此主题的其他帖子,但这些帖子似乎都没有帮助我解决我的问题。我的代码似乎在纸上工作,但我不知道为什么j-unit测试不会通过。为什么我的j-unit测试没有通过?

我的代码:

 /**
* intialize a picture by giving an image matrix
* @param imageMatrix two dimansionar RGBColor array
*/
public Picture(RGBColor imageMatrix[][]){
    this.width = imageMatrix.length;
    this.height = imageMatrix[0].length;
    this.imageMatrix = imageMatrix;
}

/**
 * turns this picture 90 degrees to the right
 *
 */
public void rot90DegRight(){
    int w = imageMatrix.length;
    int h = imageMatrix[0].length;
    RGBColor[][] rotatedMatrix = new RGBColor[h][w];
    for (int i = 0; i<h; i++){
        for(int j = 0; j<w; j++){
            rotatedMatrix[i][j] = imageMatrix[w-j-1][i];
        }
    }

}

这里也是j-unit测试用例:

@Test(timeout=1000)
public void testRot90DegRight(){
    RGBColor[][] imageMatrix = new RGBColor[100][100];
    for (int w=0; w<100; w++){
        for (int h=0; h<100; h++){
            if ((w==20) & (h==20)){
                imageMatrix[w][h] = new RGBColor(255,255,255);
            } else {
                imageMatrix[w][h] = new RGBColor(0,0,0);
            }
        }
    }
    Picture p = new Picture(imageMatrix);
    p.rot90DegRight();
    assertTrue("The white pixel was not rotated", !(p.getImageMatrix()[20][20].isWhite()));
    assertTrue("The white pixel was not rotated", (p.getImageMatrix()[79][20].isWhite()));

}

2 个答案:

答案 0 :(得分:2)

您创建了rotatedMatrix并在rot90DegRight()中分配了一些值,但之后只是将结果丢弃了。 您必须将旋转结果存储在某处。

添加

this.imageMatrix = rotatedMatrix;

外部for循环后可以使其正常工作。

请注意,这将使它在旋转后不再引用传递给构造函数的数组。

答案 1 :(得分:1)

MikeCAT是对的。就像这样(简单来说):

说你试图旋转这个双数组:

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

使用你的方法,在用[0] [0]替换[0] [3]之后,你最终回到循环中的[0] [3]并用[0]替换[0] [0] ] [3]。数组将在中途自行撤消,为您留下相同的结果。

希望这有帮助!