#include<stdio.h> #include<conio.h> #include<stdlib.h> struct obrazek { char tytul[30]; char format[2]; int szerokosc; int wysokosc; int glebokosc; int **dane; }; void komentarze(FILE *obraz) { char a; char kom[120]; do { if (a == '#') { } else { fseek(obraz, -1, SEEK_CUR);//znak zostal juz pobrany do sprawdzenia, a jesli nie jest # to chcemy go pobrac jeszcze raz do zapisu } } } void alokacja( struct obrazek*tablica, int szer, int wys) { int i = 0; int j = 0; for (i; i < wys; i++) { } } void wczytywanieobrazu(struct obrazek* tablica, int rozmiar) { char nazwa[120]; char nazwa2[200]; int i = 0; int j = 0; int n; char c; FILE*obraz; { } komentarze( obraz); komentarze(obraz); komentarze(obraz); komentarze(obraz); komentarze(obraz); //rozpoczecie zapisu samego obrazu alokacja( tablica, tablica->szerokosc, tablica->wysokosc); for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { komentarze(obraz); tablica->dane[i][j] = n; } j = 0; } } void dodawanieObrazu(struct obrazek* tablica, struct obrazek *struktury, int rozmiar) { int i = 0; int j = 0; struct obrazek *pomoc; pomoc = &struktury[rozmiar - 1]; struktury[rozmiar - 1].format[0] = tablica->format[0]; struktury[rozmiar - 1].format[1] = tablica->format[1]; struktury[rozmiar - 1].wysokosc = tablica->wysokosc; struktury[rozmiar - 1].szerokosc = tablica->szerokosc; struktury[rozmiar - 1].glebokosc = tablica->glebokosc; alokacja(pomoc, tablica->szerokosc, tablica->wysokosc); for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { struktury[rozmiar - 1].dane[i][j] = tablica->dane[i][j]; } j = 0; } } void wyswietlanieObrazu(struct obrazek*struktury, int rozmiar) { int i = 0; int j = 0; for (i; i < struktury[rozmiar - 1].wysokosc; i++) { for (j; j < struktury[rozmiar - 1].szerokosc; j++) { } j = 0; } } void alokacja2(struct obrazek*tablica, int szer, int wys) { int i = 0; int j = 0; for (i; i < wys; i++) { } } struct obrazek *usuwanie(struct obrazek*struktury, int rozmiar) { struct obrazek * tym; int a=0; int i = 0; int j = 0; char c; int numer=0; a = numer; for (a; a < rozmiar; a++) { tym = &struktury[a - 1];//numer obrazu struktury[a - 1].format[0] = struktury[a].format[0]; struktury[a - 1].format[1] = struktury[a].format[1]; struktury[a - 1].szerokosc = struktury[a].szerokosc; struktury[a - 1].wysokosc = struktury[a].wysokosc; struktury[a - 1].glebokosc = struktury[a].glebokosc; alokacja2(tym, struktury[a - 1].szerokosc, struktury[a - 1].wysokosc); for (i; i < struktury[a - 1].wysokosc; i++) { for (j; j < struktury[a - 1].szerokosc; j++) { struktury[a - 1].dane[i][j] = struktury[a].dane[i][j]; } j = 0; } } rozmiar--; return struktury; } void negatyw(struct obrazek *tablica) { int i = 0; int n = 0; int j = 0; for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { tablica->dane[i][j] = tablica->glebokosc - tablica->dane[i][j]; } j = 0; } i = 0; j = 0; } void progowanie(struct obrazek *tablica) { int prog =0; int i = 0; int j = 0; for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { if (tablica->dane[i][j] < prog) tablica->dane[i][j] = tablica->glebokosc; else tablica->dane[i][j] = 0; } j = 0; } } void histogram(struct obrazek tablica) { int * tym; int i = 0; int j = 0; for (i; i < tablica.wysokosc; i++) { for (j; j < tablica.szerokosc; j++) { tym[tablica.dane[i][j]] = tym[tablica.dane[i][j]] + 1;//jesli dany piksel ma dana glebokosc to do komorki z tym numerem dodaje sie jeden } j = 0; } i = 0; FILE *plik; { } for (i; i < tablica.glebokosc; i++) { } } void obrot(struct obrazek *tablica) { int k = 0; int i = 0; int j = 0; char c; switch (k) { case 4:break; case 1: alokacja2(tablica, tablica->wysokosc, tablica->szerokosc); tablica->szerokosc = tablica->wysokosc; tablica->wysokosc = tablica->szerokosc; for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { tablica->dane[i][j] = tablica->dane[j][tablica->szerokosc - 1 - i]; } j = 0; } i = 0; j = 0; break; case 2: for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { tablica->dane[i][j] = tablica->dane[tablica->wysokosc - i - 1][tablica->szerokosc - j - 1]; } j = 0; } i = 0; j = 0; break; case 3: alokacja2(tablica, tablica->wysokosc, tablica->szerokosc); tablica->szerokosc = tablica->wysokosc; tablica->wysokosc = tablica->szerokosc; for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { tablica->dane[i][j] = tablica->dane[tablica->szerokosc - 1 - j][i]; } j = 0; } i = 0; j = 0; break; default: return 0; break; } } void szum(struct obrazek *tablica) { int i, j, k, l; for (i = 0; i < tablica->wysokosc; i++) { for (j = 0; j < tablica->szerokosc; j++) { if (k == 5) { if (l == 1) tablica->dane[i][j] = 0; else tablica->dane[i][j] = tablica->glebokosc; } } } } void filtrMedianowy(struct obrazek *tablica) { int macierz[9]; int i, j, k, l, m, n, y, z; for (i = 1; i < (tablica->wysokosc)-1; i++) { for (j = 1; j < (tablica->szerokosc)-1; j++) { l = 1; m = 1; for (k = 0; k < 9; k++) { if ((k == 3) || (k == 6)) { m--; l = 1; } macierz[k] = tablica->dane[i - l][j - m]; l--; } for (y = 0; y < 8; y++) { for (z = 0; z < 8; z++) { if (macierz[z] > macierz[z + 1]) { n = macierz[z]; macierz[z] = macierz[z + 1]; macierz[z + 1] = n; } } } tablica->dane[i][j] = macierz[4]; } } } void zapisObrazu (struct obrazek*tablica) { int i, j; char c; char nazwa[120]; FILE*obraz; { } //rozpoczecie zapisu samego obrazu for (i; i < tablica->wysokosc; i++) { for (j; j < tablica->szerokosc; j++) { } j = 0; } } void main() { int x = 0; int y = 0; int i =0; int j =0; int z = 0; int nr= 0; int nrobrazu = 0; int rozmiar=0; int zabieranie = 0; char c; struct obrazek *tablica; struct obrazek *struktury; struct obrazek a; tablica = &a; for (;;) { switch (z) { case 1: // dodawanie wczytywanieobrazu(tablica, rozmiar); rozmiar = rozmiar + 1; dodawanieObrazu(tablica, struktury, rozmiar); break; case 2: // usuwanie struktury =usuwanie(struktury, rozmiar); rozmiar--; break; case 3: //wyswietlanie do { } while (nrobrazu>rozmiar); wyswietlanieObrazu(struktury, nrobrazu); break; case 4: if (nr >= (rozmiar + 1) || nr <= 0) { break; } obrot(&struktury[nr - 1]); nr = 0; break; case 5: if (nr >= (rozmiar+1) || nr <= 0) { break; } negatyw(&struktury[nr-1]); nr = 0; break; case 6: if (nr >= (rozmiar + 1) || nr <= 0) { break; } progowanie(&struktury[nr-1]); nr = 0; break; case 7: if (nr >= (rozmiar + 1) || nr <= 0) { break; } histogram(struktury[nr - 1]); nr = 0; break; case 8: if (nr >= (rozmiar + 1) || nr <= 0) { break; } zapisObrazu(&struktury[nr - 1]); nr = 0; break; case 9: return 0; break; default: break; } } }