在Java中逆时针旋转图像90度

时间:2016-01-20 21:07:31

标签: java

public static int[][] rotate(int[][] array){
    int height = array.length;
    int width = array[0].length;
    int[][] rotatedArray = array;

    for(int col = 0; col < width; col++){
        for(int row = 0; row < height; row++){
            rotatedArray[row][col] = array[col][row];
        }
    }
    return rotatedArray;
}

这是我的代码作为反向旋转图像90度的方法,但它不起作用。我不知道如何安排新的行和列并正确旋转它,我该如何解决?谢谢!

2 个答案:

答案 0 :(得分:1)

尝试rotatedArray[row][col] = array[col][height - row - 1];

此外,您需要将rotatedarray定义为新数组。现在,您正在为其分配array,这意味着它们都引用了相同的数据。

以下是您可以这样做的方法:

public static int[][] rotate(int[][] array) {
    int height = array[0].length;
    int width = array.length;
    int[][] rotatedArray = new int[height][];

    for(int row = 0; row < height; row++) {
        rotatedArray[row] = new int[width];
        for(int col = 0; col < width; col++) {
            rotatedArray[row][col] = array[col][height - row - 1];
        }
    }
    return rotatedArray;
}

请注意,原始数组的高度将成为新数组的宽度,反之亦然。

答案 1 :(得分:0)

通过转置行&amp;使用rotatedArray[row][col] = array[col][row]的列索引,您沿着对角线镜像图像,而不是旋转它。考虑一下 - 两个索引匹配的任何条目(例如array[0][0]array[1][1])都保持不变。那不是你想要的!

我建议您绘制一张图片以查看您看到的图案。您可以从非常小的示例开始,2乘2或3乘3。