Guest User

Untitled

a guest
Apr 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5.  
  6. #define MAX 500
  7. #define DL_LINII 80
  8.  
  9.  
  10. /*struktura do zapamiętywania danych o obrazie*/
  11. typedef struct {
  12.     int x, y, szarosci;
  13.     int **obr;
  14. }obraz;
  15.  
  16. /*funkcja zeruje dane*/
  17. void zeruj(obraz *w){
  18.     w->x=0;
  19.     w->y=0;
  20.     w->szarosci=0;
  21. }
  22.  
  23.  
  24.  
  25. /*wczytywanie obrazu*/
  26. int czytaj(FILE* p, obraz* w)
  27. {
  28.   char s[DL_LINII];
  29.   int znak,koniec=0,i,j;
  30.   int yh=0;
  31.  
  32.   /*sprawdzenie czy podano prawidłowy uchwyt pliku */
  33.   if (p==NULL)
  34.   {
  35.     fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  36.     return(0);
  37.   }
  38.   if (fgets(s,DL_LINII,p)==NULL) koniec=1;
  39.   /* Sprawdzenie "numeru magicznego - powinien być P2 */
  40.   if ( (s[0]!='P') || (s[1]!='2') || koniec)
  41.   {
  42.     fprintf(stderr,"Blad: To nie jest plik PGM\n");
  43.     return(0);
  44.   }
  45.   /* Pominiecie komentarzy */
  46.   do
  47.   {
  48.     if ((znak=fgetc(p))=='#')
  49.     {
  50.       if (fgets(s,DL_LINII,p)==NULL) koniec=1;
  51.     }  
  52.     else
  53.     {
  54.       ungetc(znak,p);
  55.     }
  56.   } while (! koniec && znak=='#');
  57.  
  58.   /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
  59.   if (fscanf(p,"%d %d %d", &w->x, &w->y, &w->szarosci)!=3)
  60.   {
  61.     fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
  62.     return(0);
  63.   }      
  64.   /*towrzenie tablicy dynamicznej
  65.  
  66.     w->obr=(int(*)[w->x])malloc(w->x * w->y * sizeof(int)); */
  67.    
  68.  
  69.     w->obr=(int**)malloc(w->y * sizeof(int**));
  70.     for (yh=0; yh < w->y; yh++){
  71.         w->obr[yh]=(int*) malloc(w->x * sizeof(int));
  72.     }
  73.   /* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
  74.   for (j=0; j < w->y; j++)
  75.   {
  76.     for (i=0; i < w->x; i++)
  77.     {
  78.       if (fscanf(p,"%d",&(w->obr[i][j]))!=1)
  79.       {
  80.     fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
  81.     return(0);
  82.       }
  83.     }
  84.   }
  85.   return 0;
  86. }
Add Comment
Please, Sign In to add comment