我正在处理存储在2D阵列中的图像,但图像是颠倒的。我要做的是垂直翻转它。我需要交换第一行和最后一行,第二行和第二行到最后一行,依此类推。这是我试过的:
public void mirror() {
for (int i = 0; i < height; i++) {
int[] firstRow = imageData[i];
int[] secondRow = imageData[height - 1 - i];
int[] tempRow = firstRow;
firstRow = secondRow;
secondRow = tempRow;
imageData[i] = secondRow;
imageData[height - 1 - i] = firstRow;
这没有任何错误,但图片根本没有变化。
height变量是imageData [] []的高度,它是存储图片的2D数组。
答案 0 :(得分:0)
您正在交换行两次。
for (int i = 0; i < height; i++)
一旦i
达到大于height / 2
的值,您就会开始访问已经交换的行,并将它们交换回原始位置。为了防止这种情况,循环应该在中间停止,即当i
到达height / 2
时。
您的算法中也存在轻微的逻辑错误;您已将secondRow
的值分配给firstRow
,反之亦然,因此这些值应为imageData[i]
和imageData[height - 1 - i]
的元素。
imageData[i] = firstRow;
imageData[height - 1 - i] = secondRow;
答案 1 :(得分:0)
你的&#34;交换&#34;是一个无操作。忽略secondRow
一分钟:
int[] firstRow = imageData[i];
int[] tempRow = firstRow;
secondRow = tempRow; // == firstRow
imageData[i] = secondRow; // == tempRow == firstRow !
最重要的是你(不)两次做掉掉互换。
相反,试试这个:
for (int i = 0; i < height / 2; ++i) {
int[] tempRow = imageData[i];
imageData[i] = imageData[height - i - 1];
imageData[height - i - 1] = tempRow;
}