我将它作为颜色数组:
public RGBImage(int width, int height, RGBColor background) {
pixel = new RGBColor[width][height];
this.w = width;
this.h = height;
this.b = background;
for(x = 0; x < width; x++){
for(y = 0; y < height; y++){
pixel[x][y] = b;
}
}
我希望旋转它,对, @Oblivion Creations ,代码已经在方形矩阵方面做得很好,但我得到 outofbounds errors 使用非方形矩阵时
public void rotateRight() {
RGBColor[][] mirror = new RGBColor[h][w];
for(int i = 0 ; i < h; i++){
for(int j = 0 ; j < w; j++){
mirror[i][j] = pixel[j][w-i-1];
}
}
pixel = mirror;
}
答案 0 :(得分:2)
我认为问题是mirror = pixel;
共享相同的引用...所以它正在改变自身,因为它正在旋转,导致它做了奇怪而奇妙的事情。
我的建议是从像素复制到镜像,然后在for循环后将镜像分配给像素,如下所示:
public void rotateLeft() {
RGBColor[][] mirror = new RGBColor[w][h];
if(w == h){
for(int i = 0 ; i < h; i++){
for(int j = 0 ; j < h; j++){
mirror[i][j] = pixel[h-j-1][i];
}
}
pixel = mirror;
}
}
编辑:
对于新的RotateRight,您使用宽度变量而不是未旋转像素阵列的高度。试试这个:
public void rotateRight() {
RGBColor[][] mirror = new RGBColor[h][w];
for(int i = 0 ; i < h; i++){
for(int j = 0 ; j < w; j++){
mirror[i][j] = pixel[j][h-i-1];
}
}
pixel = mirror;
}
答案 1 :(得分:0)
问题在于mirror = pixel
指定mirror
引用与pixel
相同的数组。它不复制数组。然后在你的循环中,pixel[i][j] = mirror[h-j-1][i]
将一个像素从一个单元格复制到另一个单元格同一个数组。