

これは、プログラムのメイン関数を引き抜いたものです。これを実行したら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]


CC BY-SA 4.0
2020-05-27T07:24:49.350
67029
2020-08-31T08:00:50.080
2020-05-27T07:36:42.487
3060
39787
question
c 画像
画像処理を C 言語で行っています。画像を90度回転させたいです。


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

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


CC BY-SA 4.0
2020-05-27T09:01:15.807
67034
2020-05-27T12:30:35.903
2020-05-27T12:30:35.903
2808
2808
67029
answer


左90度回転の場合、画像処理の

[code]

    img_out.data[i][j]=img_in.data[img_in.xsize-j-1][i];
    
[/code]

を次のように変えればうまくいくと思います。

[code]

    img_out.data[i][j]=img_in.data[j][img_in.xsize-j-1];
    
[/code]

私はOUTPUTに着目するのではなく、INPUTに着目する方が楽だと思いました。

[code]

    img_out.data[img_in.xsize-i-1][j]=img_in.data[j][i];
    
[/code]

私見ですが、画を書いて、ロジックを組み立てるのがよいと思います。

[code]

    入力データ
    +--+--+--+
    | 1| 2| 3|
    +--+--+--+
    | 4| 5| 6|
    +--+--+--+
    | 7| 8| 9|
    +--+--+--+
    |10|11|12|
    +--+--+--+
    
[/code]

[code]

    出力データ
    +--+--+--+--+
    | 3| 6| 9|12|
    +--+--+--+--+
    | 2| 5| 8|11|
    +--+--+--+--+
    | 1| 4| 7|10|
    +--+--+--+--+
    
[/code]


CC BY-SA 4.0
2020-05-27T09:23:31.083
67035
2020-05-27T09:30:55.250
2020-05-27T09:30:55.250
35558
35558
67029
answer