Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.08 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4.  
  5. #define MAX 512            /* Maksymalny rozmiar wczytywanego obrazu */
  6. #define DL_LINII 1024      /* Dlugosc buforow pomocniczych */
  7.  
  8.  
  9.  
  10.  
  11.  
  12. /************************************************************************************                                                                 \
  13.   * Funkcja wczytuje obraz PGM z pliku do tablicy                                    *                                                                \
  14.                                                                                                                                                       \
  15.  * \param[in] plik_we uchwyt do pliku z obrazem w formacie PGM                      *                                                                 \
  16.  * \param[out] obraz_pgm tablica, do ktorej zostanie zapisany obraz                 *                                                                 \
  17.  * \param[out] wymx szerokosc obrazka                                               *                                                                 \
  18.  * \param[out] wymy wysokosc obrazka                                                *                                                                 \
  19.  * \param[out] szarosci liczba odcieni szarosci                                     *                                                                 \
  20.  * \return liczba wczytanych pikseli                                                *                                                                 \
  21.  ************************************************************************************/
  22.  
  23.  
  24.  
  25.  
  26.                             /*Czytaj*/
  27.  
  28.  
  29. int czytaj(FILE *plik_we,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
  30.   char buf[DL_LINII];      /* bufor pomocniczy do czytania naglowka i komentarzy */
  31.   int znak;                /* zmienna pomocnicza do czytania komentarzy */
  32.   int koniec=0;            /* czy napotkano koniec danych w pliku */
  33.   int i,j;
  34.  
  35.   /*Sprawdzenie czy podano prawid?owy uchwyt pliku */
  36.   if (plik_we ==NULL) {
  37.     fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  38.     return(0);
  39.   }
  40.  
  41.   /* Sprawdzenie "numeru magicznego" - powinien by? P2 */
  42.   if (fgets(buf,DL_LINII,plik_we)==NULL)   /* Wczytanie pierwszej linii pliku do bufora */
  43.  koniec=1;                              /* Nie udalo sie? Koniec danych! */
  44.  
  45.   if ( (buf[0]!='P') || (buf[1]!='2') || koniec) {  /* Czy jest magiczne "P2"? */
  46.     fprintf(stderr,"Blad: To nie jest plik PGM\n");
  47.     return(0);
  48.   }
  49.  
  50.   /* Pominiecie komentarzy */
  51.   do {
  52.     if ((znak=fgetc(plik_we))=='#') {         /* Czy linia rozpoczyna sie od znaku '#'? */
  53.       if (fgets(buf,DL_LINII,plik_we)==NULL)  /* Przeczytaj ja do bufora                */
  54.         koniec=1;                   /* Zapamietaj ewentualny koniec danych */
  55.     }  else {
  56.       ungetc(znak,plik_we);                   /* Gdy przeczytany znak z poczatku linii */
  57.     }                                         /* nie jest '#' zwroc go                 */
  58.   } while (znak=='#' && !koniec);   /* Powtarzaj dopoki sa linie komentarza */
  59.   /* i nie nastapil koniec danych         */
  60.  
  61.   /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
  62.   if (fscanf(plik_we,"%d %d %d",wymx,wymy,szarosci)!=3) {
  63.     fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
  64.     return(0);
  65.   }
  66. /* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
  67.   for (i=0;i<*wymy;i++) {
  68.     for (j=0;j<*wymx;j++) {
  69.       if (fscanf(plik_we,"%d",&(obraz_pgm[i][j]))!=1) {
  70.         fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
  71.         return(0);
  72.       }
  73.     }
  74. }
  75. return *wymx**wymy;   /* Czytanie zakonczone sukcesem    */
  76. }                       /* Zwroc liczbe wczytanych pikseli */
  77.  
  78.  
  79.                            /*Wsywietl*/
  80.  
  81.  
  82. /* Wyswietlenie obrazu o zadanej nazwie za pomoca programu "display"   */
  83.  
  84. void wyswietl(char *n_pliku) {
  85.   char polecenie[DL_LINII];      /* bufor pomocniczy do zestawienia polecenia */
  86. strcpy(polecenie,"display ");  /* konstrukcja polecenia postaci */
  87.   strcat(polecenie,n_pliku);     /* display "nazwa_pliku" &       */
  88.   strcat(polecenie," &");
  89.   printf("%s\n",polecenie);      /* wydruk kontrolny polecenia */
  90.   system(polecenie);             /* wykonanie polecenia        */
  91. }
  92.  
  93.                              /*Zapisz*/
  94.  
  95.  
  96. /************************************************************************************                                                                 \
  97.  * Funkcja wczytuje obraz PGM z tablicy do pliku                                                                                                      \
  98.  \ param[out] plik_wy uchwyt do pliku z obrazem w formacie PGM                                                                                        \
  99.  \ param[in] obraz_pgm tablica, do ktorej zostanie zapisany obraz                                                                                     \
  100.  \ param[in] wymx szerokosc obrazka                                                                                                                   \
  101.  \ param[in] wymy wysokosc obrazka                                                                                                                    \
  102.  \ param[in] szarosci liczba odcieni szarosci                                                                                                         \
  103.  \ return liczba wczytanych pikseli                                                                                                         **********\
  104. **************************************************************************/
  105.  
  106. int zapisz(FILE *plik_wy,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
  107.   int i,j;
  108.  
  109.   /*Sprawdzenie czy podano ooowy uchwyt pliku */
  110.    if (plik_wy==NULL) {
  111.     fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  112.     return(0);}
  113.  
  114.    fprintf(plik_wy,"P2\n %d %d\n %d\n", *wymx,*wymy,*szarosci); /*pobranie wartosci do nowego pliku*/
  115.  
  116.   /* Pobranie obrazu z tablicy i zapisanie obraz_pgm*/
  117.   for (i=0;i<*wymy;i++) {
  118.     for (j=0;j<*wymx;j++) {
  119.       fprintf(plik_wy,"%d ",(obraz_pgm[i][j]));
  120.        }
  121.     fprintf(plik_wy,"\n");
  122.   }
  123.    return (*wymx)*(*wymy);   /* Zapisywanie zakonczone sukcesem    */
  124.  
  125. }                       /* Zwroc liczbe zapisywanych pikseli */
  126.  
  127.  
  128.  
  129.  
  130.                             /*Negatyw*/
  131.  
  132. int negatyw(int obraz_pgm[][MAX],int *wymx, int *wymy, int *szarosci){
  133.   int i,j;
  134.   printf("%d %d %d",*wymx ,*wymy, *szarosci);
  135.   for(i=0; i<*wymx; i++);{
  136.     for(j=0; j<*wymy;j++){
  137.  
  138.       obraz_pgm[i][j]=(*szarosci)-obraz_pgm[i][j];
  139.       printf("%d " ,obraz_pgm[i][j]);
  140.     }
  141.   }
  142.  
  143. }
  144.  
  145.  
  146.  
  147. int main() {
  148.   int obraz[MAX][MAX] ;
  149.   int wymx,wymy,odcieni;
  150.   int i,j=0,g=0;     /*Zmienna pomocnicza uzyta w petli*/
  151.   int w;     /*Zmienna przy wyborze funkcji w menu*/
  152.   int odczytano = 0;
  153.   FILE *plik;
  154.   char nazwa[100];
  155.  
  156.  
  157.   for(i=1;i>0;i++){
  158.     puts("Menu:");
  159.     puts("1.Wczytaj obraz");
  160.     puts("2.Wyswietl obraz");
  161.     puts("3.Zapisz obraz");
  162.     puts("4.Negatyw");
  163.     puts("5.Zakoncz dzialanie programu");
  164.     printf("Twoj wybor:");
  165.     scanf("%d",&w);
  166.  switch(w){
  167.  
  168.     case 1:
  169.  
  170.     /* Wczytanie zawartosci wskazanego pliku do pamieci */
  171.   printf("Podaj nazwe pliku:\n");
  172.   scanf("%s",nazwa);
  173.   plik=fopen(nazwa,"r");
  174.  
  175.   if (plik != NULL) {       /* co spowoduje zakomentowanie tego warunku */
  176.     odczytano= czytaj(plik,obraz,&wymx,&wymy,&odcieni);
  177.     fclose(plik);
  178.   }
  179.  
  180.  
  181.   break;
  182.     case 2:
  183.   /* Wyswietlenie poprawnie wczytanego obraza zewnetrznym programem */
  184.   if (odczytano != 0)
  185.     wyswietl(nazwa);
  186.  
  187.   break;
  188.     case 3:
  189.  
  190.       /* Stworzenie nowego  pliku */
  191.       printf("Podaj nazwe nowego pliku:\n");
  192.       scanf("%s",nazwa);
  193.       plik=fopen(nazwa,"w");
  194.  
  195.        if (plik != NULL) {       /* co spowoduje zakomentowanie tego warunku */
  196.         odczytano= zapisz(plik,obraz,&wymx,&wymy,&odcieni);
  197.        }
  198.       fclose(plik);
  199.  
  200.  
  201.  
  202.       break;
  203.  
  204.     case 4:
  205.       negatyw(obraz,&wymx,&wymy,&odcieni);
  206.   printf("Uzyto funkcji negatyw\n");
  207.  
  208.  
  209.       break;
  210.     case 5:
  211.       return 0;
  212.     }
  213.   }
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement