2016-05-01 2 views
0

私はしばらくこのことに固執しています。どのようにピクセル値0-255をpgmファイルから配列にコピーするのですか?これは私がこれまで持っていたものです。私はそれがそうであると思われるものから離れていることを知っている。.pgmファイルからピクセル値を読み込んで配列にコピーする方法。 Cプログラミング

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, int *argv[]) 
{ 


     int i = 0, j = 0; 
     unsigned int str[1000]; 
     FILE *pgmFile; 

     if (argc != 2) 
     { 
      printf ("ERROR, Not enough arguments."); 
      exit(EXIT_FAILURE); 
     } 

     if ((pgmFile = fopen(argv[1], "r")) == NULL) 
     { 
      printf ("ERROR, File cannot be opened"); 
      exit(EXIT_FAILURE); 
     } 

     do 
     { 
      fscanf (pgmFile, "%d", str[i]); 
      printf ("%d", str[i]); 
      i++; 
     } 
     while (str[i] != EOF); 



    fclose (pgmFile); 

    return 0; 
} 
+0

これはファイルを1行ずつ読み込んで印刷しますか?次に、ヘッダー行(コメント行を無視して)を読んだ後、空白で区切られた行を、私が思うピクセル値で分割します。あなたはどこにいるのですか? – Rup

+0

私はその次のヘッダで作業しますが、私のpgmファイルでこのコードを実行すると、白いスペースは0、黒いスペースは1882140160のような数字が得られます。なぜそれが0-255の範囲から外れますか?私の写真は白黒です。 –

+0

ループ終了はオフです。最初に、fscanfはEOFを返します。第2に、while条件がチェックされる前に 'i'をインクリメントして、ユニット化されたメモリを読み込みます。これはおそらく、ファイルの最後を「読んでいる」ことを意味し、その時点で 'str'にガベージを表示します。 –

答えて

0

最初にヘッダー(3行)を読みます。

ヘッダーからのデータを使用して、Y行のforループ読み取りを設定できます。各行の中で、ピクセルデータのX量と改行を読み取る必要があります。 read関数のいずれかがエラーコードを返す場合は、エラーメッセージを出力して中止する必要があります。

https://en.wikipedia.org/wiki/Netpbm_format

関連する問題