0

グレースケール画像を水平方向に反転しようとしています。ポインター fp は元の画像を指しており、ポインター fp1 は水平方向に反転した画像を作成しています。プログラムは正常に実行されていますが、出力イメージは最悪です...

    for( i =0 ;i<width ; i++)
     for(j=0; j <height; j++)
              idata[i][height - 1 -j] = ( (unsigned char)fgetc(fp));
    //flipping image          
for( i =0 ;i<width ; i++)
     for(j=0; j <height; j++)
              putc(idata[i][j] , fp1);                

画像のヘッダーコピーは問題ありません。問題はforループにあると思います...助けてください

4

1 に答える 1

3

幅と高さを混同していませんか?このコードは、データが行方向である可能性が最も高い場合に、データが列方向で読み取られることを前提としているようです。次のように、forループと反転の次元を反転してみてください。

for(j = 0; j < height; j++)
    for(i = 0; i < width; i++)
        idata[width - 1 - i][j] = ( (unsigned char)fgetc(fp));

//flipping image          

for(j = 0; j < height; j++)
    for(i = 0; i < width; i++)
        putc(idata[i][j] , fp1);
于 2012-10-08T19:35:37.083 に答える