如何在java中对角反映图像

时间:2017-04-16 20:34:46

标签: java multidimensional-array

我有以下代码以对角线反映图像:

{{1}}

然而我搞砸了某个地方,它反映了从图像右上角到左下角的图像。

我的问题:我如何以其他方式反映出来? (更具体地说,从左上角到右下角)

2 个答案:

答案 0 :(得分:0)

您认为右上角的像素实际上是左上角。请尝试以下方法:

for (int row = 0; row < maxLength; row++) {
    for (int col = maxLength - row - 1; col >= 0; col--) {
        topRightPixel = pixels[row][col];
        bottomLeftPixel = pixels[col][row];
        bottomLeftPixel.setColor(topRightPixel.getColor());
    }
}

答案 1 :(得分:0)

为什么要改变颜色?您可以改为移动像素对象。此外,如果您定义3个基本转换,您可以通过以不同方式组合前3个来构建所有其他转换。 e.g。

static void mirrorHor(Pixel[][] pixels) {
  for(int row = 0; row < pixels.length; row++) {
    for(int col = 0; col + col < pixels[row].length - 1; col++) {
      Pixel p = pixels[row][col];
      pixels[row][col] = pixels[row][pixels[row].length - col - 1];
      pixels[row][pixels[row].length - col - 1] = p;
    }
  }
}

static void mirrorVert(Pixel[][] pixels) {
  for(int row = 0; row + row < pixels.length - 1; row++) {
    Pixel[] r = pixels[row];
    pixels[row] = pixels[pixels.length - row - 1];
    pixels[pixels.length - row - 1] = r;
  }
}

static void mirrorTopRightBottomLeft(Pixel[][] pixels) {
  for(int row = 0; row < pixels.length - 1; row++) {
    for(int col = row + 1; col < pixels.length; col++) {
      Pixel p = pixels[row][col];
      pixels[row][col] = pixels[col][row];
      pixels[col][row] = p;
    }
  }
}

static void rotate180(Pixel[][] pixels) {
  mirrorHor(pixels);
  mirrorVert(pixels);
}

static void mirrorTopLeftBottomRight(Pixel[][] pixels) {
  mirrorTopRightBottomLeft(pixels);
  rotate180(pixels);
}

static void rotateLeft90(Pixel[][] pixels) {
  mirrorTopRightBottomLeft(pixels);
  mirrorVert(pixels);
}

static void rotateRight90(Pixel[][] pixels) {
  mirrorTopRightBottomLeft(pixels);
  mirrorHor(pixels);
}