2016-05-01 34 views
0

我一直堅持這一段時間。我將如何去將pgm文件中的像素值0-255複製到數組中?這是我迄今爲止所擁有的。我知道我已經脫離了原來的想法。如何從.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

所以這讀取文件中的行由行,並打印出來?那麼你所需要做的就是讀取標題行(忽略註釋行),然後用我認爲像素值分割出空白分隔的行。你堅持哪部分? – Rup

+0

我會在接下來的標題上工作,但是當我在我的pgm文件上運行此代碼時,我得到0代表空格和數字,例如1882140160表示黑色空格。爲什麼它突破了0-255範圍?我的照片是黑白的。 –

+0

您的循環終止處於關閉狀態。首先,fscanf返回EOF。其次,您在檢查while條件之前增加'i',以便讀入單位內存。這可能意味着您正在「讀取」文件末尾,此時您將在'str'中打印出垃圾。 –

回答

0

您應該先閱讀標題(3行)。

使用來自標題的數據,您可以在Y行數量中設置for循環讀數。在每行中,您應該讀取X數量的像素數據和新行。如果任何讀取函數返回錯誤代碼,則應打印出錯誤消息並中止。

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

相關問題