2016-10-17 56 views
0

我正在處理存儲在二維數組中但圖像顛倒的圖像。我想要做的是垂直翻轉它。我需要交換第一行和最後一行,第二行和第二行到最後一行,依此類推。這是我試過的:垂直反轉圖像(存儲在二維數組中)

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; 

這個運行沒有任何錯誤,但圖片根本沒有改變。

高度變量是imageData [] []的高度,它是存儲圖片的二維數組。

回答

0

您正在交換行兩次

for (int i = 0; i < height; i++) 

一旦i達到值比​​時,你開始訪問所有已換行,並交換他們回到原來的位置。爲了防止這種情況,循環應該在中間停止,即當i達到​​時。

您的算法中也有輕微的邏輯錯誤;您已將secondRow的值指定爲firstRow,反之亦然,因此這些值分別爲imageData[i]imageData[height - 1 - i]的元素。

imageData[i] = firstRow; 
imageData[height - 1 - i] = secondRow; 
0

您的「交換」是無操作。忽略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; 
}