我有以下代码以对角线反映图像:
{{1}}
然而我搞砸了某个地方,它反映了从图像右上角到左下角的图像。
我的问题:我如何以其他方式反映出来? (更具体地说,从左上角到右下角)
答案 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);
}