1

我有这个作为颜色数组:

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 ,代码在方阵方面已经做得很好了,但是在使用非方阵时 我遇到了越界错误

   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;
  }
4

2 回答 2

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;
}
于 2014-10-16T23:17:15.357 回答
0

问题是mirror = pixel分配mirror引用相同的数组作为pixel. 它不复制数组。因此,然后在您的循环中,pixel[i][j] = mirror[h-j-1][i]将像素从数组的一个单元格复制到同一数组的另一个单元格。

于 2014-10-16T23:21:48.840 回答