2017-01-07 5 views
1

私はPGMイメージで動作するプログラムを持っています。私はそれをリメイクしなければならないので、PPMイメージでも機能します。私は現在、動的に割り当てられたテーブルを使用してイメージをメモリに格納しています。問題は、PGMイメージではうまくいくということですが、PPMは半分にカットされています。 Input&output 何が起こっているのですか?これらは私が不審だと思う場所である:C - PGMとPPM - 動的に割り当てられたテーブル、イメージは半分にカットされます

これは私がテーブルを作成する方法である。また、TObrazの構造を

int zapisz(FILE *plik_wy,TObraz *obraz) 
{ 
    int i,j; 
    if(obraz->format==2) 
     fprintf(plik_wy,"P2\n"); 
    else 
     fprintf(plik_wy,"P3\n"); 
    fprintf(plik_wy,"%d %d\n",obraz->wymx,obraz->wymy); 
    fprintf(plik_wy,"%d\n",obraz->szarosci); 
    for(i=0;i<obraz->wymy;i++) 
    { 
     for(j=0;j<obraz->wymx;j++) 
     { 
      fprintf(plik_wy,"%d ",obraz->piksele[i][j]); 
      if(j>1 && j%15==0) 
       fprintf(plik_wy,"\n"); 
     } 
    } 
    return 0; 
} 

obraz->piksele=(int**)malloc(obraz->wymy*sizeof(int *)); 
for(i=0; i<obraz->wymy; i++) 
{ 
    obraz->piksele[i]=(int*)malloc(obraz->wymx*sizeof(int)); 
} 
    for (i=0;i<obraz->wymy;i++) { 
    for (j=0;j<obraz->wymx;j++) { 
     fscanf(plik_we,"%d",&(obraz->piksele[i][j])); 
    } 
    } 
    } 
    return obraz->wymx*obraz->wymy; 
}   

は、これは私が新しいファイルを保存する方法です。

typedef struct 
{ 
    int **piksele; 
    int format; 
    int wymx; 
    int wymy; 
    int szarosci; 
} TObraz; 

答えて

0

mallocあなたがやっているPGM(グレースケール)とPPM(カラーIMAGでも同じですe)ファイル。あなたの結果では、PPMイメージは半分にカットされず、1/3にカットされます。

まず第一に、あなたがやっている、あるべきmalloc関数:ファイル内

obraz->piksele=(int**)malloc(obraz->wymy*sizeof(int *)); 
for(i=0; i<obraz->wymy; i++) 
{ 
    obraz->piksele[i]=(int*)malloc(3 * obraz->wymx*sizeof(int)); 
} 

より変更保存は、最終的なアプリケーションに応じて、可能性があります。各フォーマット指定の

参照:

http://netpbm.sourceforge.net/doc/pgm.html

http://netpbm.sourceforge.net/doc/ppm.html

関連する問題