Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct
- {
- char nazwa_obrazu[100];
- char standard[3];
- int wysokosc;
- int szerokosc;
- int max_odcien;
- int **zawartosc_obrazu;
- }obraz;
- void wyczyscbufor()
- {
- int c;
- while (((c = getc(stdin)) != '\n') && (c != EOF));
- }
- void wczytywanie_obrazu(obraz* obrazy, int nr_obrazu)
- {
- FILE* plik;
- int dane_podstawowe;
- int **zawartosc;
- int i, j;
- while (1)
- {
- printf("Podaj nazwe obrazu z rozszerzeniem(patrz tylko na pliki z .pgm)\n");
- scanf("%s", (obrazy + nr_obrazu)->nazwa_obrazu);
- plik = fopen((obrazy + nr_obrazu)->nazwa_obrazu, "r");
- if (plik == NULL)
- {
- printf("Podano zla nazwe obrazu, sprobuj ponownie\n");
- }
- else
- {
- break;
- }
- }
- fscanf(plik, "%s", (obrazy + nr_obrazu)->standard);
- if ((fscanf(plik, "%d", &dane_podstawowe)) == 0)
- {
- while (fgetc(plik) != '\n');
- fscanf(plik, "%d", &dane_podstawowe);
- }
- (obrazy + nr_obrazu)->szerokosc = dane_podstawowe;
- if ((fscanf(plik, "%d", &dane_podstawowe)) == 0)
- {
- while (fgetc(plik) != '\n');
- fscanf(plik, "%d", &dane_podstawowe);
- }
- (obrazy + nr_obrazu)->wysokosc = dane_podstawowe;
- if ((fscanf(plik, "%d", &dane_podstawowe)) == 0)
- {
- while (fgetc(plik) != '\n');
- fscanf(plik, "%d", &dane_podstawowe);
- }
- (obrazy + nr_obrazu)->max_odcien = dane_podstawowe;
- zawartosc = (int**)calloc((obrazy + nr_obrazu)->wysokosc, sizeof(int*));
- if ((obrazy + nr_obrazu) != NULL)
- {
- for (i = 0; i < ((obrazy + nr_obrazu)->wysokosc); i++)
- {
- *(zawartosc + i) = (int*)calloc((obrazy + nr_obrazu)->szerokosc, sizeof(int));
- if (zawartosc[i] == NULL)
- {
- printf("Blad alokacji pamieci\n");
- for (j = 0; j < i; j++)
- {
- free(zawartosc[i]);
- }
- }
- }
- }
- else
- {
- printf("Blad alokacji pamieci\n");
- free(zawartosc);
- }
- for (i = 0; i < ((obrazy + nr_obrazu)->wysokosc); i++)
- {
- for (j = 0; j < ((obrazy + nr_obrazu)->szerokosc);)
- {
- if (fscanf(plik, "%d", &zawartosc[i][j]) == 1)
- {
- j++;
- }
- else
- {
- while (fgetc(plik) != '\n');
- }
- }
- }
- (obrazy + nr_obrazu)->zawartosc_obrazu = zawartosc;
- fclose(plik);
- }
- void zapisywanie_obrazu(obraz* obrazy, int nr_obrazu) //Cos nie dziala nadal
- {
- FILE* plik;
- char* nowa_nazwa;
- int i, j;
- int w = 0;
- char x[] = ".pgm";
- nowa_nazwa = (char*)calloc(101, sizeof(char));
- system("cls");
- printf("Podaj nazwe obrazu pod jaka chcesz zapisac obraz\n");
- scanf("%s", nowa_nazwa);
- wyczyscbufor();
- strcat(nowa_nazwa, x);
- plik = fopen(nowa_nazwa, "w");
- fprintf(plik, "%s\n", (obrazy + nr_obrazu)->standard);
- fprintf(plik, "%d %d\n", (obrazy + nr_obrazu)->szerokosc, (obrazy + nr_obrazu)->wysokosc);
- fprintf(plik, "%d\n", (obrazy + nr_obrazu)->max_odcien);
- for (i = 0; i < (obrazy + nr_obrazu)->wysokosc; i++)
- {
- for (j = 0; j < (obrazy + nr_obrazu)->szerokosc; j++)
- {
- fprintf(plik, "%d ", (obrazy + nr_obrazu)->zawartosc_obrazu[i][j]);
- }
- fprintf(plik, "\n");
- }
- free(nowa_nazwa);
- fclose(plik);
- }
- void drukuj_zawartosc(obraz* obrazy, int nr_obrazu)
- {
- int i, j;
- printf("Standard obrazu: %s\n", (obrazy + nr_obrazu)->standard);
- printf("Szerokosc: %d Wysokosc: %d\n", (obrazy + nr_obrazu)->szerokosc, (obrazy + nr_obrazu)->wysokosc);
- printf("Maksymalny odcien szarosci: %d\n", (obrazy + nr_obrazu)->max_odcien);
- printf("Zawartosc obrazu:\n");
- for (i = 0; i < (obrazy + nr_obrazu)->wysokosc; i++)
- {
- for (j = 0; j < (obrazy + nr_obrazu)->szerokosc; j++)
- {
- printf("%d ", (obrazy + nr_obrazu)->zawartosc_obrazu[i][j]);
- }
- printf("\n");
- }
- }
- void drukuj_liste(obraz* obrazy, int ilosc_obrazow)
- {
- int i;
- printf("Lista obrazow:\n");
- for (i = 0; i < ilosc_obrazow; i++)
- {
- printf("%d)%s\n", i + 1, (obrazy + i)->nazwa_obrazu);
- }
- }
- void zwalnianie_pamieci(obraz*obrazy, int nr_aktywnego, int licznik) //zwalanianie miesjca w tablicyvi przepisanie obrazow
- {
- int i, j;
- for (i = 0; i < (obrazy + nr_aktywnego)->wysokosc; i++)
- {
- free((obrazy + nr_aktywnego)->zawartosc_obrazu[i]);
- }
- free((obrazy + nr_aktywnego)->zawartosc_obrazu);
- for (j = nr_aktywnego; j < licznik - 1; j++)
- {
- *(obrazy + j) = *(obrazy + j + 1);
- }
- }
- void odbicie()
- {
- }
- void histogram()
- {
- }
- void progowanie()
- {
- }
- void negatyw()
- {
- }
- void pieprz_sol()
- {
- }
- void filtr_gausa()
- {
- }
- void filtr_medianowy()
- {
- }
- int main()
- {
- obraz* obraz_i; //Tablica obrazow
- int nr_obrazu = 0; //numer uzywany tylko to odczytu obrazu z miesjcami w tablicy
- int x = 0;
- int nr_aktywnego = 0; //Numer obrazu na ktorym dzialamu, domyslnie pierwszy obraz z listy
- obraz_i = calloc(1, sizeof(obraz));
- printf("Witaj w programie dzialajacym na obrazach\n");
- while (x != 6)
- {
- printf("Menu:\n");
- printf("1)Dodawanie obrazu\n");
- printf("2)Usuwanie obrazu\n");
- printf("3)Wybor aktywnego obrazu\n");
- printf("4)Dzialania na obrazach\n");
- printf("5)Drukowanie zawartosci obrazu\n");
- printf("6)Zakonczenie dzialania programu\n");
- if ((scanf("%d", &x) == 1) && x > 0 && x < 7)
- {
- switch (x)
- {
- case 1:
- wyczyscbufor();
- system("cls");
- system("dir");
- if (nr_obrazu == 0)
- {
- wczytywanie_obrazu(obraz_i, nr_obrazu);
- nr_obrazu = 1;
- }
- else
- {
- nr_obrazu = nr_obrazu + 1;
- obraz_i = (obraz*)realloc(obraz_i, nr_obrazu * sizeof(obraz));
- wczytywanie_obrazu(obraz_i, nr_obrazu - 1);
- }
- printf("Dodano obraz\n");
- printf("\n");
- break;
- case 2:
- wyczyscbufor();
- system("cls");
- if (nr_obrazu == 0)
- {
- printf("W bazie nie ma zapisanych zadnych obrazow, sprobuj ponownie\n");
- printf("\n");
- break;
- }
- else
- {
- printf("Podaj ktory obraz chcesz usunac\n");
- printf("-----------------------------\n");
- drukuj_liste(obraz_i, nr_obrazu);
- printf("-----------------------------\n");
- scanf("%d", &nr_aktywnego);
- if (nr_aktywnego <= nr_obrazu && nr_aktywnego > 0)
- {
- zwalnianie_pamieci(obraz_i, nr_aktywnego - 1, nr_obrazu);
- nr_obrazu = nr_obrazu - 1;
- if (nr_obrazu != 0)
- {
- obraz_i = realloc(obraz_i, nr_obrazu * sizeof(obraz));
- }
- printf("Obraz zostal usuniety pomyslnie\n");
- printf("\n");
- nr_aktywnego = 0;
- break;
- }
- else
- {
- printf("Podano zly numer obrazu\n");
- break;
- }
- }
- case 3:
- wyczyscbufor();
- system("cls");
- printf("-----------------------------\n");
- drukuj_liste(obraz_i, nr_obrazu);
- printf("-----------------------------\n");
- if (nr_obrazu == 0)
- {
- printf("W bazie nie ma zadnego obrazu, najpierw dodaj obraz\n");
- break;
- }
- else
- {
- printf("Podaj na ktorych obrazie chcesz dzialac\n");
- scanf("%d", &nr_aktywnego);
- while (nr_aktywnego > nr_obrazu || nr_aktywnego < 1)
- {
- wyczyscbufor();
- printf("Podano zly numer obrazu, wybierz ponownie\n");
- scanf("%d", &nr_aktywnego);
- }
- printf("Aktywny obraz nr %d", nr_aktywnego);
- printf("\n");
- printf("\n");
- break;
- }
- case 4:
- wyczyscbufor();
- if (nr_obrazu == 0)
- {
- printf("W bazie nie ma zapisanych zadnych obrazow, sprobuj ponownie\n");
- printf("\n");
- }
- else
- {
- if (nr_aktywnego == 0)
- {
- system("cls");
- printf("Nie wybrales zadnego obrazu\n");
- printf("\n");
- }
- else
- {
- zapisywanie_obrazu(obraz_i, nr_aktywnego - 1);
- }
- }
- break;
- case 5:
- wyczyscbufor();
- if (nr_aktywnego == 0)
- {
- system("cls");
- printf("Nie wybrales zadnego obrazu\n");
- printf("\n");
- break;
- }
- else
- {
- system("cls");
- drukuj_zawartosc(obraz_i, nr_aktywnego - 1);
- }
- break;
- case 6:
- wyczyscbufor();
- printf("Koniec programu\n");
- free(obraz_i);
- break;
- }
- }
- else
- {
- system("cls");
- printf("Podano zla opcje, sprobuj ponownie\n");
- wyczyscbufor();
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement