Guest User

Untitled

a guest
Apr 23rd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.97 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.         }
  53.       }
  54.       return *wymx**wymy;
  55.     }
  56.  
  57.     void wyswietl(char *n_pliku) {
  58.       /* Wyswietlenie obrazu o zadanej nazwie za pomoca programu "display" */
  59.       char polecenie[1024];
  60.       strcpy(polecenie,"display ");
  61.       strcat(polecenie,n_pliku);
  62.       strcat(polecenie," &");
  63.       printf("%s\n",polecenie);
  64.       system(polecenie);
  65.     }
  66.  
  67.     void negatyw(){
  68.       int i,j;
  69.       for (j=0;j<wymy;j++)
  70.         for (i=0;i<wymx;i++) L[i][j]=szarosci-L[i][j];
  71.     }
  72.  
  73.     void progowanie(int L[][MAX],int prog, int wymx, int wymy, int szarosci){
  74.       int i,j;
  75.       for (j=0;j<wymy;j++)
  76.         for (i=0;i<wymx;i++) {
  77.           if (L[i][j]<=prog) L[i][j]=0;
  78.           else  L[i][j]=szarosci;
  79.         }
  80.     }
  81.  
  82.     void konturowanie(int L[][MAX],int wymx, int wymy, int szarosci){
  83.       int i,j;
  84.       for (j=0;j<wymy;j++)
  85.         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]);
  86.     }
  87.  
  88.     int zapisz(FILE *p){
  89.       int j,i;
  90.       /*sprawdzenie czy podano prawidooowy uchwyt pliku */
  91. if (p==NULL) {
  92.         fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  93.         return(0);
  94.       }
  95.       fprintf(p,"P2\n");
  96.       fprintf(p,"#negatyw\n");
  97.       fprintf(p,"%d %d %d\n",wymx,wymy,szarosci);
  98.       for (j=0;j<wymy;j++){
  99.         for (i=0;i<wymx;i++) {
  100.           fprintf(p,"%d ",obraz_pgm[i][j]);
  101.         }
  102.       }
  103.       return wymx*wymy;
  104.     }
  105.  
  106.     int main()
  107.     {
  108.       int wybor;
  109.       FILE *plik;
  110.       printf("Podaj nazwe pliku:\n");
  111.       char nazwa[100];
  112.       scanf("%s",nazwa);
  113.       plik=fopen(nazwa,"r");
  114.       czytaj(plik, obraz_pgm, &wymx, &wymy, &szarosci);
  115.       printf("Menu\n");
  116.       printf("1.Wyswietl obraz\n");
  117.       printf("2.Negatyw\n");
  118.       printf("3.Progowanie\n");
  119.       printf("4.Konturowanie\n");
  120.       printf("5.Zapisz plik\n");
  121.       printf("6.Wyjdz z programu\n");
  122.  
  123.       while(wybor!=6){
  124.       switch (wybor)
  125.         {
  126.         case 1:
  127.  
  128.           wyswietl(n_pliku);
  129.           break;
  130.  
  131.         case 2:
  132.  
  133.           negatyw();
  134.           break;
  135.  
  136.         case 3:
  137.  
  138.         progowanie(L, prog, wymx, wymy, szarosci);
  139.           break;
  140.  
  141.         case 4:
  142.  
  143.           konturowanie(L, wymx, wymy, szarosci);
  144.           break;
  145.  
  146.     case 5: {
  147. FILE *plik2;
  148. plik2=fopen("nowy.pgm","w");
  149. zapisz(plik2);
  150.  break;}
  151.  
  152.         case 6:
  153.  
  154.           return 0;
  155.           break ;
  156.         }
  157.     scanf("%d",&wybor);
  158.     }
  159.     }
Add Comment
Please, Sign In to add comment