2016-10-28 1 views
1

割り当てのために、私はPGM画像のファイル名を読み込んだら、かなり大きなコードを与えられています。ループすると、新しいファイルが書き込まれます。 PGMは、2D配列に0〜255の数値を格納するグレースケール画像です。私は新しいファイルが何らかの方法で調整されるように、関数内のforループと配列を調整することになっています。これまでに書いたものがいくつかあります。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

(画像は正方形の後、第2 forで単にj = iある場合)あなたは3枚の画像のいずれかを与えられた場合、あなたは右、第四を取得したいですか? – Pavel

+0

私たちはいつも、編集をしていない女性の最初のイメージから始めます。それは、開始画像から第4画像に向かいます。 – beginner

+0

イメージは常に正方形ですか? – Pavel

答えて

1

値を対角点(img[i][(int)(numCols*i/(float)numRows))])から右側にコピーしたいとします。したがって、jインデックスはi*numCols/numRows番目の位置から開始する必要があります。

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

関連する問題