我完全被这个问题难住了。所以这是我将数组旋转 90 度的逻辑:
例子:
1 2 3 4 5..... ^
2 6 8 7 4..... |
6 4 9 8 0..... | .....THEN..... ------>
8 3 0 5 9..... |
所以如果我想将它旋转 90 度,我想要的是从最底部的行向上读取数组,然后在右侧添加一个宽度。所以数组将是
8 6 2 1
3 4 6 2
0 9 8 3
5 8 7 4
9 0 4 5
现在我将此逻辑应用于我的像素数组并将图片旋转 90 度
这是我在 Java 中的方法的代码:
public void rotate90(){
Pixel[][] rotated = new Pixel[Iwidth][Iheight];
int Ch = Iheight-1, Cw = 0;
while (Cw < Iwidth){
while (Ch > -1){
rotated[Cw][Iheight - Ch - 1] = new Pixel(Image[Ch][Cw].getRed(), Image[Ch][Cw].getGreen(), Image[Ch][Cw].getBlue());
Ch--;
}
Cw++;
Ch = Iheight-1;
}
Image = rotated;
int temp = Iheight;
Iheight = Iwidth;
Iwidth = temp;
}
当我调用该方法时,它会使图片出现乱码,但图片的宽度和高度是切换/交换的。
但这是我的时候,如果我尝试调用方法 TWICE,那么图片将正确旋转 180 度
如果我尝试调用方法四次,图片将是真实的。
谁能阐明我错过了什么或做错了什么?
我发现了问题,我无法回答我自己的问题,所以这是我的代码的问题:
而不是放
imageWriter.println(Iwidth + " " + Iheight);
我有一个
imageWriter.println(Iheight + " " + Iwidth);
在我的作家方法中愚蠢的我 - _ __ _ -
感谢@Marcelo 和@rolfl 提供帮助。发现了问题。
我的代码一直都是正确的,我有一个愚蠢的 1 班轮代码让我一团糟