2016-10-28 50 views
1

對於一個賦值,我得到了一大塊代碼,它讀入一個PGM圖像的文件名,然後通過一個函數運行它,循環,它會寫入一個新文件。 PGM是在二維數組中存儲數字0〜255的灰度圖像。我應該調整函數中的for循環和數組,以便以某種方式調整新文件。以下是我迄今爲止所寫的一些內容。用C中的數組替換圖像的一部分C

enter image description here

int i,j; 

    for (i=0;i<numRows/2;i++) 
    { for (j=numCols/2;j<numCols;j++) 
      { 
       imgtemp[i+numRows/2-1][j+numCols/2-1] = imgtemp[i][j]; 
      } 
    } 

int i,j; 

    for (i=0;i<numRows;i++) 
    { for (j=0;j<i;j++) 
      { 
       imgtemp[i][j] = 0; 
      } 
    } 

我有一些麻煩搞清楚如何在水平和垂直翻轉選擇。

我認爲這將是這樣的:

int i,j; 

    for (i=0;i<numRows;i++) 
    { for (j=0;j<i;j++) 
      { 
       imgtemp[numCols-1-i][numRows-1-j] = imgtemp[i][j]; 
      } 
    } 

,但它結束了翻轉圖像的錯誤部分。我不知道如何解決它。

+0

如果你給出任何三張圖片的,你想獲得第四,對不對? – Pavel

+0

我們總是從沒有任何編輯的女人的第一張圖片開始,所以不會。它會從開始的圖像到第四個圖像。 – beginner

+0

圖像總是方形的嗎? – Pavel

回答

1

您想將對角點(img[i][(int)(numCols*i/(float)numRows))])的值複製到右側。所以你的j指數應該從i*numCols/numRows位置開始。 (如果圖像是方形的,然後只是簡單的在第二forj = i

int i,j; 

for (i=0;i<numRows;i++) 
{ 
    for (j=(int)((numCols*i/(float)numRows)); j<numCols; j++) 
    { 
     imgtemp[numRows-1-i][numCols-1-j] = imgtemp[i][j]; 
    } 
} 
+0

哦,我明白了!謝謝,這個解決了,現在我明白了。我很感激! – beginner