画像処理を C 言語で行っています。画像を90度回転させたいです。


これは、プログラムのメイン関数を引き抜いたものです。これを実行したら90度回転になるはずなのですが、実行できないです。対策として、

  * img_outのサイズに基づいてループを回す  
→ img_out[i][j]に値を代入するように，img_inのインデックスを調整する

  * img_inのサイズに基づいてループを回す  
→ img_in[i][j]を代入する先となる img_out のインデックスを調整する
すればいいと思うのですが分かっていても、それをどうすればいいかわからないです。ヒントか具体例が欲しいです。

[code]

    int main(int argc, char *arge[]){
        struct img_data img_org,img_out;
    
        /*画像読み込み*/
        img_org=img_from_pgm(arge[1]);
    
        /*画像処理*/
        img_out=ImageProcessing(img_org);
    
        /*画像書き出し*/
        img_to_pgm(img_out,arge[2]);
        return 1;
    }
    /*画像処理*/
    struct img_data ImageProcessing(struct img_data img_in){
        int i,j;
        struct img_data img_out;
        /*出力用の画像準備*/
        img_out=img_set(img_in.ysize,img_in.xsize);
        /*処理部*/
        for(j=0;j<img_in.ysize;j++)
            for(i=0;i<img_in.xsize;i++){
                img_out.data[i][j]=img_in.data[img_in.xsize-j-1][i];/*???]????*/
            }
    
        /*処理結果を返す*/
        return img_out;
    }
    
[/code]




(実行できない、というのが具体的にどういう事象を指しているのか分かりませんが)少なくとも座標変換は間違っているように見えます。  
図を書いて回転前後の座標を具体的に考えてみるのが手っ取り早いと思います。

[![画像の説明をここに入力](https://i.stack.imgur.com/HoOXQ.png)](https://i.stack.imgur.com/HoOXQ.png)

