Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.97 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. typedef struct
  5. {
  6.     char nazwa_obrazu[100];
  7.     char standard[3];
  8.     int wysokosc;
  9.     int szerokosc;
  10.     int max_odcien;
  11.     int **zawartosc_obrazu;
  12. }obraz;
  13. void wyczyscbufor()
  14. {
  15.     int c;
  16.     while (((c = getc(stdin)) != '\n') && (c != EOF));
  17. }
  18. void wczytywanie_obrazu(obraz* obrazy, int nr_obrazu)
  19. {
  20.     FILE* plik;
  21.     int dane_podstawowe;
  22.     int **zawartosc;
  23.     int i, j;
  24.     while (1)
  25.     {
  26.         printf("Podaj nazwe obrazu z rozszerzeniem(patrz tylko na pliki z .pgm)\n");
  27.         scanf("%s", (obrazy + nr_obrazu)->nazwa_obrazu);
  28.         plik = fopen((obrazy + nr_obrazu)->nazwa_obrazu, "r");
  29.         if (plik == NULL)
  30.         {
  31.             printf("Podano zla nazwe obrazu, sprobuj ponownie\n");
  32.         }
  33.         else
  34.         {
  35.             break;
  36.         }
  37.     }
  38.     fscanf(plik, "%s", (obrazy + nr_obrazu)->standard);
  39.     if ((fscanf(plik, "%d", &dane_podstawowe)) == 0)
  40.     {
  41.         while (fgetc(plik) != '\n');
  42.         fscanf(plik, "%d", &dane_podstawowe);
  43.     }
  44.     (obrazy + nr_obrazu)->szerokosc = dane_podstawowe;
  45.  
  46.     if ((fscanf(plik, "%d", &dane_podstawowe)) == 0)
  47.     {
  48.         while (fgetc(plik) != '\n');
  49.         fscanf(plik, "%d", &dane_podstawowe);
  50.     }
  51.     (obrazy + nr_obrazu)->wysokosc = dane_podstawowe;
  52.  
  53.     if ((fscanf(plik, "%d", &dane_podstawowe)) == 0)
  54.     {
  55.         while (fgetc(plik) != '\n');
  56.         fscanf(plik, "%d", &dane_podstawowe);
  57.     }
  58.     (obrazy + nr_obrazu)->max_odcien = dane_podstawowe;
  59.  
  60.     zawartosc = (int**)calloc((obrazy + nr_obrazu)->wysokosc, sizeof(int*));
  61.     if ((obrazy + nr_obrazu) != NULL)
  62.     {
  63.         for (i = 0; i < ((obrazy + nr_obrazu)->wysokosc); i++)
  64.         {
  65.             *(zawartosc + i) = (int*)calloc((obrazy + nr_obrazu)->szerokosc, sizeof(int));
  66.             if (zawartosc[i] == NULL)
  67.             {
  68.                 printf("Blad alokacji pamieci\n");
  69.                 for (j = 0; j < i; j++)
  70.                 {
  71.                     free(zawartosc[i]);
  72.                 }
  73.             }
  74.         }
  75.     }
  76.     else
  77.     {
  78.         printf("Blad alokacji pamieci\n");
  79.         free(zawartosc);
  80.     }
  81.  
  82.     for (i = 0; i < ((obrazy + nr_obrazu)->wysokosc); i++)
  83.     {
  84.  
  85.         for (j = 0; j < ((obrazy + nr_obrazu)->szerokosc);)
  86.         {
  87.             if (fscanf(plik, "%d", &zawartosc[i][j]) == 1)
  88.             {
  89.                 j++;
  90.             }
  91.             else
  92.             {
  93.                 while (fgetc(plik) != '\n');
  94.             }
  95.         }
  96.     }
  97.     (obrazy + nr_obrazu)->zawartosc_obrazu = zawartosc;
  98.     fclose(plik);
  99. }
  100. void zapisywanie_obrazu(obraz* obrazy, int nr_obrazu)                       //Cos nie dziala nadal
  101. {
  102.     FILE* plik;
  103.     char* nowa_nazwa;
  104.     int i, j;
  105.     int w = 0;
  106.     char x[] = ".pgm";
  107.     nowa_nazwa = (char*)calloc(101, sizeof(char));
  108.     system("cls");
  109.     printf("Podaj nazwe obrazu pod jaka chcesz zapisac obraz\n");
  110.     scanf("%s", nowa_nazwa);
  111.     wyczyscbufor();
  112.     strcat(nowa_nazwa, x);
  113.     plik = fopen(nowa_nazwa, "w");
  114.     fprintf(plik, "%s\n", (obrazy + nr_obrazu)->standard);
  115.     fprintf(plik, "%d %d\n", (obrazy + nr_obrazu)->szerokosc, (obrazy + nr_obrazu)->wysokosc);
  116.     fprintf(plik, "%d\n", (obrazy + nr_obrazu)->max_odcien);
  117.     for (i = 0; i < (obrazy + nr_obrazu)->wysokosc; i++)
  118.     {
  119.         for (j = 0; j < (obrazy + nr_obrazu)->szerokosc; j++)
  120.         {
  121.             fprintf(plik, "%d ", (obrazy + nr_obrazu)->zawartosc_obrazu[i][j]);
  122.         }
  123.         fprintf(plik, "\n");
  124.     }
  125.     free(nowa_nazwa);
  126.     fclose(plik);
  127. }
  128. void drukuj_zawartosc(obraz* obrazy, int nr_obrazu)
  129. {
  130.     int i, j;
  131.     printf("Standard obrazu: %s\n", (obrazy + nr_obrazu)->standard);
  132.     printf("Szerokosc: %d Wysokosc: %d\n", (obrazy + nr_obrazu)->szerokosc, (obrazy + nr_obrazu)->wysokosc);
  133.     printf("Maksymalny odcien szarosci: %d\n", (obrazy + nr_obrazu)->max_odcien);
  134.     printf("Zawartosc obrazu:\n");
  135.     for (i = 0; i < (obrazy + nr_obrazu)->wysokosc; i++)
  136.     {
  137.         for (j = 0; j < (obrazy + nr_obrazu)->szerokosc; j++)
  138.         {
  139.             printf("%d ", (obrazy + nr_obrazu)->zawartosc_obrazu[i][j]);
  140.         }
  141.         printf("\n");
  142.     }
  143. }
  144. void drukuj_liste(obraz* obrazy, int ilosc_obrazow)
  145. {
  146.     int i;
  147.     printf("Lista obrazow:\n");
  148.     for (i = 0; i < ilosc_obrazow; i++)
  149.     {
  150.         printf("%d)%s\n", i + 1, (obrazy + i)->nazwa_obrazu);
  151.     }
  152. }
  153. void zwalnianie_pamieci(obraz*obrazy, int nr_aktywnego, int licznik)                //zwalanianie miesjca w tablicyvi przepisanie obrazow
  154. {
  155.     int i, j;
  156.     for (i = 0; i < (obrazy + nr_aktywnego)->wysokosc; i++)
  157.     {
  158.         free((obrazy + nr_aktywnego)->zawartosc_obrazu[i]);
  159.     }
  160.     free((obrazy + nr_aktywnego)->zawartosc_obrazu);
  161.     for (j = nr_aktywnego; j < licznik - 1; j++)
  162.     {
  163.         *(obrazy + j) = *(obrazy + j + 1);
  164.     }
  165. }
  166. void odbicie()
  167. {
  168.  
  169. }
  170. void histogram()
  171. {
  172. }
  173. void progowanie()
  174. {
  175.  
  176. }
  177. void negatyw()
  178. {
  179.  
  180. }
  181. void pieprz_sol()
  182. {
  183.  
  184. }
  185. void filtr_gausa()
  186. {
  187.  
  188. }
  189. void filtr_medianowy()
  190. {
  191.  
  192. }
  193. int main()
  194. {
  195.     obraz* obraz_i;             //Tablica obrazow
  196.     int nr_obrazu = 0;              //numer uzywany tylko to odczytu obrazu z miesjcami w tablicy
  197.     int x = 0;
  198.     int nr_aktywnego = 0;               //Numer obrazu na ktorym dzialamu, domyslnie pierwszy obraz z listy
  199.     obraz_i = calloc(1, sizeof(obraz));
  200.     printf("Witaj w programie dzialajacym na obrazach\n");
  201.     while (x != 6)
  202.     {
  203.         printf("Menu:\n");
  204.         printf("1)Dodawanie obrazu\n");
  205.         printf("2)Usuwanie obrazu\n");
  206.         printf("3)Wybor aktywnego obrazu\n");
  207.         printf("4)Dzialania na obrazach\n");
  208.         printf("5)Drukowanie zawartosci obrazu\n");
  209.         printf("6)Zakonczenie dzialania programu\n");
  210.         if ((scanf("%d", &x) == 1) && x > 0 && x < 7)
  211.         {
  212.             switch (x)
  213.             {
  214.             case 1:
  215.                 wyczyscbufor();
  216.                 system("cls");
  217.                 system("dir");
  218.                 if (nr_obrazu == 0)
  219.                 {
  220.                     wczytywanie_obrazu(obraz_i, nr_obrazu);
  221.                     nr_obrazu = 1;
  222.                 }
  223.                 else
  224.                 {
  225.                     nr_obrazu = nr_obrazu + 1;
  226.                     obraz_i = (obraz*)realloc(obraz_i, nr_obrazu * sizeof(obraz));
  227.                     wczytywanie_obrazu(obraz_i, nr_obrazu - 1);
  228.                 }
  229.                 printf("Dodano obraz\n");
  230.                 printf("\n");
  231.                 break;
  232.             case 2:
  233.                 wyczyscbufor();
  234.                 system("cls");
  235.                 if (nr_obrazu == 0)
  236.                 {
  237.                     printf("W bazie nie ma zapisanych zadnych obrazow, sprobuj ponownie\n");
  238.                     printf("\n");
  239.                     break;
  240.                 }
  241.                 else
  242.                 {
  243.                     printf("Podaj ktory obraz chcesz usunac\n");
  244.                     printf("-----------------------------\n");
  245.                     drukuj_liste(obraz_i, nr_obrazu);
  246.                     printf("-----------------------------\n");
  247.                     scanf("%d", &nr_aktywnego);
  248.                     if (nr_aktywnego <= nr_obrazu && nr_aktywnego > 0)
  249.                     {
  250.                         zwalnianie_pamieci(obraz_i, nr_aktywnego - 1, nr_obrazu);
  251.                         nr_obrazu = nr_obrazu - 1;
  252.                         if (nr_obrazu != 0)
  253.                         {
  254.                             obraz_i = realloc(obraz_i, nr_obrazu * sizeof(obraz));
  255.                         }
  256.                         printf("Obraz zostal usuniety pomyslnie\n");
  257.                         printf("\n");
  258.                         nr_aktywnego = 0;
  259.                         break;
  260.                     }
  261.                     else
  262.                     {
  263.                         printf("Podano zly numer obrazu\n");
  264.                         break;
  265.                     }
  266.                 }
  267.             case 3:
  268.                 wyczyscbufor();
  269.                 system("cls");
  270.                 printf("-----------------------------\n");
  271.                 drukuj_liste(obraz_i, nr_obrazu);
  272.                 printf("-----------------------------\n");
  273.                 if (nr_obrazu == 0)
  274.                 {
  275.                     printf("W bazie nie ma zadnego obrazu, najpierw dodaj obraz\n");
  276.                     break;
  277.                 }
  278.                 else
  279.                 {
  280.                     printf("Podaj na ktorych obrazie chcesz dzialac\n");
  281.                     scanf("%d", &nr_aktywnego);
  282.                     while (nr_aktywnego > nr_obrazu || nr_aktywnego < 1)
  283.                     {
  284.                         wyczyscbufor();
  285.                         printf("Podano zly numer obrazu, wybierz ponownie\n");
  286.                         scanf("%d", &nr_aktywnego);
  287.                     }
  288.                     printf("Aktywny obraz nr %d", nr_aktywnego);
  289.                     printf("\n");
  290.                     printf("\n");
  291.                     break;
  292.                 }
  293.             case 4:
  294.                 wyczyscbufor();
  295.                 if (nr_obrazu == 0)
  296.                 {
  297.                     printf("W bazie nie ma zapisanych zadnych obrazow, sprobuj ponownie\n");
  298.                     printf("\n");
  299.                 }
  300.                 else
  301.                 {
  302.                     if (nr_aktywnego == 0)
  303.                     {
  304.                         system("cls");
  305.                         printf("Nie wybrales zadnego obrazu\n");
  306.                         printf("\n");
  307.                     }
  308.                     else
  309.                     {
  310.                         zapisywanie_obrazu(obraz_i, nr_aktywnego - 1);
  311.                     }
  312.                 }
  313.                 break;
  314.             case 5:
  315.                 wyczyscbufor();
  316.                 if (nr_aktywnego == 0)
  317.                 {
  318.                     system("cls");
  319.                     printf("Nie wybrales zadnego obrazu\n");
  320.                     printf("\n");
  321.                     break;
  322.                 }
  323.                 else
  324.                 {
  325.                     system("cls");
  326.                     drukuj_zawartosc(obraz_i, nr_aktywnego - 1);
  327.                 }
  328.                 break;
  329.             case 6:
  330.                 wyczyscbufor();
  331.                 printf("Koniec programu\n");
  332.                 free(obraz_i);
  333.                 break;
  334.             }
  335.         }
  336.         else
  337.         {
  338.             system("cls");
  339.             printf("Podano zla opcje, sprobuj ponownie\n");
  340.             wyczyscbufor();
  341.         }
  342.     }
  343.     return 0;
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement