垂直反转图像(存储在2D阵列中)

时间:2016-10-17 02:41:56

标签: java arrays

我正在处理存储在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数组。

2 个答案:

答案 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;
}