3

假设这张图片(图 1)中的每个像素都是数组中的一个元素。我如何将它逆时针旋转 90 度(图 2)并垂直反转(图 3)?

图1: 图。1

图2:图2

图 3:在此处输入图像描述

我目前的代码是:

private static Color[][] invert(Color[][] chunk){ //same as rotate
    Color[] temp;
    for(int i=0;i<chunk.length/2;i++){ //reverse the data
        temp=chunk[i];
        chunk[i]=chunk[chunk.length-i-1];
        chunk[chunk.length-i-1]=temp;
    }
    return chunk;
}

private static Color[][] rotate(Color[][] chunk){
    int cx = chunk.length;
    int cz = chunk[0].length;
    Color[][] rotated = new Color[cz][cx];
    for(int x=0;x<cx;++x){
        for(int z=0;z<cz;++z){
            rotated[z][x]=chunk[cz-z-1][x];
        }
    }
    return rotated;
}

反转的功能与旋转相同。有什么帮助吗?

4

2 回答 2

3

似乎您正在尝试转置数组 ( fig3 = transpose(fig1))。

使用双 for 循环并在条目[i][j]中保存[j][i].

有关矩阵转置的更多信息,请参阅链接...

所以总而言之,您可以使用transpose获取 fig3,然后invert获取 fig2。

于 2012-06-24T09:50:12.240 回答
2

Baz 是对的,转置将完成工作。看起来您的转置方法仅使用了源数组?如果你循环遍历这两个长度,你会撤销你在前半部分所做的所有工作。这种转置方法对我有用:

public static Color[] [] transpose (Color[] [] a){
    int[] [] t = new Color [a [0].length] [a.length];
    for (int i = 0 ; i < a.length ; i++){
        for (int j = 0 ; j < a [0].length ; j++){
            t [j] [i] = a [i] [j];
        }
    }
    return t;
}
于 2012-06-24T11:08:20.063 回答