Guest User

Untitled

a guest
Apr 23rd, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.10 KB | None | 0 0
  1.     #include<stdio.h>
  2.     #include<string.h>
  3.     #include<stdlib.h>
  4.     #include<math.h>
  5.  
  6.     #define MAX 512
  7.     #define DL_LINII 80
  8.  
  9.     FILE p;
  10.     int obraz_pgm [MAX] [MAX] ;
  11.     int L [MAX] [MAX];
  12. int wymx,wymy,szarosci,prog;
  13.     char n_pliku[24];
  14.  
  15.  
  16.     int czytaj(FILE *p,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
  17.       char s[DL_LINII];
  18.       int znak,koniec=0,i,j;
  19.  
  20.       /*sprawdzenie czy podano prawidooowy uchwyt pliku */
  21.       if (p==NULL) {
  22.         fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  23.         return(0);
  24.       }
  25.       if (fgets(s,DL_LINII,p)==NULL) koniec=1;
  26.       /* Sprawdzenie "numeru magicznego - powinien by P2 */
  27.       if ( (s[0]!='P') || (s[1]!='2') || koniec) {
  28.         fprintf(stderr,"Blad: To nie jest plik PGM\n");
  29.         return(0);
  30.       }
  31.       /* Pominiecie komentarzy */
  32.       do {
  33.         if ((znak=fgetc(p))=='#') {
  34.           if (fgets(s,DL_LINII,p)==NULL) koniec=1;
  35.         }  else {
  36.           ungetc(znak,p);
  37.         }
  38.       } while (! koniec && znak=='#');
  39.  
  40.       /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
  41.       if (fscanf(p,"%d %d %d",wymx,wymy,szarosci)!=3) {
  42.         fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
  43.         return(0);
  44.       }
  45.       /* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
  46.       for (j=0;j<*wymy;j++) {
  47.         for (i=0;i<*wymx;i++) {
  48.           if (fscanf(p,"%d",&(obraz_pgm[i][j]))!=1) {
  49.             fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
  50.             return(0);
  51.           }
  52.           printf("%d  ", obraz_pgm[i][j]) ;
  53.         }
  54.         printf("\n") ;
  55.       }
  56.       return *wymx**wymy;
  57.     }
  58.  
  59.     void wyswietl(char *n_pliku) {
  60.       /* Wyswietlenie obrazu o zadanej nazwie za pomoca programu "display" */
  61.       char polecenie[1024];
  62.       strcpy(polecenie,"display ");
  63.       strcat(polecenie,n_pliku);
  64.       strcat(polecenie," &");
  65.       printf("%s\n",polecenie);
  66.       system(polecenie);
  67.     }
  68.  
  69.     void negatyw(){
  70.       int i,j;
  71.       for (j=0;j<wymy;j++)
  72.         for (i=0;i<wymx;i++) L[i][j]=szarosci-L[i][j];
  73.     }
  74.  
  75.     void progowanie(int L[][MAX],int prog, int wymx, int wymy, int szarosci){
  76.       int i,j;
  77.       for (j=0;j<wymy;j++)
  78.         for (i=0;i<wymx;i++) {
  79.           if (L[i][j]<=prog) L[i][j]=0;
  80.           else  L[i][j]=szarosci;
  81.         }
  82.     }
  83.  
  84.     void konturowanie(int L[][MAX],int wymx, int wymy, int szarosci){
  85.       int i,j;
  86.       for (j=0;j<wymy;j++)
  87.         for (i=0;i<wymx;i++) L[i][j]=abs(L[i+1][j]-L[i][j])+abs(L[i][j+1]-L[i][j]);
  88.     }
  89.  
  90.     int zapisz(FILE *p){
  91.       int j,i;
  92.       /*sprawdzenie czy podano prawidooowy uchwyt pliku */
  93. if (p==NULL) {
  94.         fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  95.         return(0);
  96.       }
  97.       fprintf(p,"P2\n");
  98.       fprintf(p,"#negatyw\n");
  99.       fprintf(p,"%d %d %d\n",wymx,wymy,szarosci);
  100.       for (j=0;j<wymy;j++){
  101.         for (i=0;i<wymx;i++) {
  102.             printf("%d  ",obraz_pgm[i][j]) ;
  103.           fprintf(p,"%d ",obraz_pgm[i][j]);
  104.         }
  105.         printf("\n") ;
  106.       }
  107.       return wymx*wymy;
  108.     }
  109.  
  110.     int main()
  111.     {
  112.       int wybor;
  113.       FILE *plik;
  114.       printf("Podaj nazwe pliku:\n");
  115.       char nazwa[100];
  116.       scanf("%s",nazwa);
  117.       plik=fopen(nazwa,"r");
  118.       czytaj(plik, obraz_pgm, &wymx, &wymy, &szarosci);
  119.       printf("Menu\n");
  120.       printf("1.Wyswietl obraz\n");
  121.       printf("2.Negatyw\n");
  122.       printf("3.Progowanie\n");
  123.       printf("4.Konturowanie\n");
  124.       printf("5.Zapisz plik\n");
  125.       printf("6.Wyjdz z programu\n");
  126.  
  127.       while(wybor!=6){
  128.       switch (wybor)
  129.         {
  130.         case 1:
  131.  
  132.           wyswietl(n_pliku);
  133.           break;
  134.  
  135.         case 2:
  136.  
  137.           negatyw();
  138.           break;
  139.  
  140.         case 3:
  141.  
  142.         progowanie(L, prog, wymx, wymy, szarosci);
  143.           break;
  144.  
  145.         case 4:
  146.  
  147.           konturowanie(L, wymx, wymy, szarosci);
  148.           break;
  149.  
  150.     case 5: {
  151. FILE *plik2;
  152. plik2=fopen("nowy.pgm","w");
  153. zapisz(plik2);
  154.  break;}
  155.  
  156.         case 6:
  157.  
  158.           return 0;
  159.           break ;
  160.         }
  161.     scanf("%d",&wybor);
  162.     }
  163.     }
Add Comment
Please, Sign In to add comment