Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.36 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include <stdlib.h>
  4. #include<windows.h>
  5. #include <math.h>
  6. #include <time.h>
  7. #include <string.h>
  8.  
  9.  
  10. struct obraz
  11. {
  12. char *nazwa_pliku;
  13. char *typ_obrazu;
  14. int szerokosc;
  15. int wysokosc;
  16. int max_wart_szar;
  17. int **piksele;
  18. };
  19.  
  20. void odczyt_pliku_do_struktury(struct obraz *biblioteka_obrazow, int wielkosc_biblioteki_obrazow, int *flaga_zaladowania_obrazu);
  21. void sprawdz_komentarz(FILE *plik);
  22. struct obraz* dodawanie_obrazu_do_biblioteki(struct obraz *biblioteka_obrazow, int *wielkosc_biblioteki_obrazow, int *flaga_zaladowania_do_biblioteki_wew);
  23. struct obraz* usuwanie_obrazu_z_biblioteki(struct obraz *biblioteka_obrazow, int *wielkosc_biblioteki_obrazow, int numer_edytowanego_obrazu, int *flaga_usuniecia_obrazu_wew);
  24. void zapis_do_pliku(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_zapisu);
  25.  
  26. void progowanie(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu);
  27. void negatyw(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu);
  28. void obrot_90(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_edycji);
  29. void odbicie_wzgl_osi_pionowej(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu);
  30. void odbicie_wzgl_osi_poziomej(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu);
  31. void histogram(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu);
  32. void szum_pieprz_sol(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu);
  33. void filtr_medianowy(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_filtru);
  34. void filtr_Gaussa(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_filtru);
  35.  
  36. void sortowanie(int *tablica_sortowanie);
  37.  
  38.  
  39. // system( "cls" );
  40.  
  41. int main()
  42. {
  43. int i;
  44. int j;
  45.  
  46. int wybor_akcji;
  47. int bufor;
  48. int numer_edytowanego_obrazu;
  49. int wybor_narzedzia;
  50. //int bufor1;
  51.  
  52.  
  53. int wielkosc_biblioteki_obrazow = 1;
  54.  
  55. int flaga_zaladowania_obrazu = 1;
  56. int flaga_zaladowania_do_biblioteki_wew = 1;
  57. int flaga_zaladowania_do_biblioteki = 1;
  58. int flaga_wyboru_obrazu = 1;
  59. int flaga_usuniecia_obrazu_wew = 1;
  60. int flaga_usuniecia_obrazu = 1;
  61. int flaga_zapisu = 1;
  62. int flaga_edycji = 1;
  63. int flaga_filtru = 1;
  64. // flaga = 0, dobrze flaga = 1, zle
  65.  
  66. struct obraz *biblioteka_obrazow = NULL;
  67. biblioteka_obrazow = malloc(wielkosc_biblioteki_obrazow * sizeof(struct obraz));
  68.  
  69. /*printf("\n MENU\n");
  70. printf("Twoje opcje to:\n");
  71. printf("1. Zaladowanie obraz z pliku.\n");
  72. printf("2. Wyswietlenie biblioteki obrazow.\n");
  73. printf("3. Wybor aktywnego obrazu.\n");
  74. printf("4. Zapis aktywnego obrazu do pliku.\n");
  75. printf("5. Usuwanie aktywnego obrazu z biblioteki.\n");
  76. printf("6. Narzedzia edycji.\n");
  77. printf("0. Wyjscie z programu.\n");*/
  78.  
  79.  
  80. while (1)
  81. {
  82.  
  83. printf("\n MENU\n");
  84. printf("Twoje opcje to:\n");
  85. printf("1. Zaladowanie obraz z pliku.\n");
  86. printf("2. Wyswietlenie biblioteki obrazow.\n");
  87. printf("3. Wybor aktywnego obrazu.\n");
  88. printf("4. Zapis aktywnego obrazu do pliku.\n");
  89. printf("5. Usuwanie aktywnego obrazu z biblioteki.\n");
  90. printf("6. Narzedzia edycji.\n");
  91. printf("0. Wyjscie z programu.\n");
  92.  
  93.  
  94.  
  95. printf("\nWybierz ktoras z opcji z menu:\n");
  96. do
  97. {
  98. while (scanf("%d", &wybor_akcji) == 0)
  99. {
  100. printf("BLAD, podales zly typ zmiennej, sproboj jeszcze raz wybrac dobra opcje z menu.\n");
  101. while ((bufor = getchar()) != '\n');
  102. }
  103. while ((bufor = getchar()) != '\n');
  104.  
  105. if (wybor_akcji < 0 || wybor_akcji > 6)
  106. {
  107. printf("BLAD - nie ma takiej opcji. Wybierz jeszcze raz.\n");
  108. }
  109. } while (wybor_akcji < 0 || wybor_akcji > 6);
  110.  
  111.  
  112.  
  113. switch (wybor_akcji)
  114. {
  115. case 1: // CASE 1 dodawanie obrazow do biblioteki
  116.  
  117. odczyt_pliku_do_struktury(biblioteka_obrazow, wielkosc_biblioteki_obrazow, &flaga_zaladowania_obrazu);
  118.  
  119. if (flaga_zaladowania_obrazu == 0)
  120. {
  121. printf("Wybrany obraz zostal pozytywnie zaladowany.\n");
  122. biblioteka_obrazow = dodawanie_obrazu_do_biblioteki(biblioteka_obrazow, &wielkosc_biblioteki_obrazow, &flaga_zaladowania_do_biblioteki_wew);
  123.  
  124. if (flaga_zaladowania_do_biblioteki_wew == 0) // flaga_zaladowania_do_biblioteki
  125. {
  126. printf("Wybrany obraz zostal pozytywnie dodany do bilioteki.\n");
  127. flaga_zaladowania_do_biblioteki = 0;
  128. wielkosc_biblioteki_obrazow++;
  129.  
  130. }
  131. else// (flaga_zaladowania_do_biblioteki == 1)
  132. {
  133. printf("Nie udalo sie dodac obrazu do biblioteki.\n");
  134. //flaga_zaladowania_do_biblioteki = 0;
  135. break;
  136. }
  137. }
  138. else// (flaga_zaladowania_obrazu == 1)
  139. {
  140. printf("Nie zaladowano obrazu.\n");
  141. }
  142. break;
  143.  
  144. case 2: // CASE 2 wyswietlanie bilioteki
  145.  
  146. if (flaga_zaladowania_do_biblioteki == 0) // obraz dodany
  147. {
  148. for (i = 0; i < wielkosc_biblioteki_obrazow - 1; i++)
  149. {
  150. printf("\n%d ELEMENT BIBLIOTEKI OBRAZOW: %s\n", i + 1, biblioteka_obrazow[i].nazwa_pliku);
  151. }
  152. }
  153. else // flaga = 1, brak obrazu w bibliotece
  154. {
  155. printf("Biblioteka obrazow jest pusta.\n");
  156. }
  157.  
  158. break;
  159.  
  160. case 3: // CASE 3 wybor obrazu
  161.  
  162. if (flaga_zaladowania_do_biblioteki == 0) // obraz dodany
  163. {
  164. printf("\nObrazy dostepne w bibliotece:\n");
  165. for (i = 0; i < wielkosc_biblioteki_obrazow - 1; i++)
  166. {
  167. printf("\n%d.%s\n", i + 1, biblioteka_obrazow[i].nazwa_pliku);
  168. }
  169.  
  170. printf("\nPodaj numer obrazu ktory chcesz edytowac.\n");
  171. do
  172. {
  173. while (scanf("%d", &numer_edytowanego_obrazu) == 0)
  174. {
  175. printf("BLAD, bledny typ danych.");
  176. while ((bufor = getchar()) != '\n');
  177. }
  178. while ((bufor = getchar()) != '\n');
  179.  
  180. if (numer_edytowanego_obrazu < 1 || numer_edytowanego_obrazu > wielkosc_biblioteki_obrazow - 1)
  181. {
  182. printf("BLAD - nie ma takiego obrazu. Wybierz jeszcze raz. "); /// wcisniecie 0 spowoduje powrot do menu glownego
  183. }
  184.  
  185. } while (numer_edytowanego_obrazu < 0 || numer_edytowanego_obrazu > wielkosc_biblioteki_obrazow - 1);
  186.  
  187. flaga_wyboru_obrazu = 0;
  188. printf("\nPracujesz na obrazie numer %d o nazwie %s.\n", numer_edytowanego_obrazu, biblioteka_obrazow[numer_edytowanego_obrazu - 1].nazwa_pliku);
  189.  
  190.  
  191.  
  192. }
  193. else // flaga = 1, brak obrazu w bibliotece
  194. {
  195. printf("Biblioteka obrazow jest pusta.\n");
  196. flaga_wyboru_obrazu = 1;
  197. }
  198.  
  199. break;
  200.  
  201. case 4:// ZAPIS
  202.  
  203. if (flaga_zaladowania_do_biblioteki == 0)
  204. {
  205. if (flaga_wyboru_obrazu == 0)
  206. {
  207. zapis_do_pliku(biblioteka_obrazow, numer_edytowanego_obrazu, &flaga_zapisu);
  208. if (flaga_zapisu == 0)
  209. {
  210. printf("Obraz zostal pozytywnie zapisany.\n");
  211. }
  212. }
  213. else
  214. {
  215. printf("Nie wybrano aktywnego obrazu!\n");
  216. }
  217. }
  218. else
  219. {
  220. printf("Biblioteka obrazow jest pusta.\n");
  221. }
  222.  
  223. break;
  224.  
  225. case 5: // CASE 4 usuwanie obrazu
  226.  
  227. if (flaga_zaladowania_do_biblioteki == 0) // gdy biblioteka ma obraz
  228. {
  229. if (flaga_wyboru_obrazu == 0) // gdy wybralismy obraz
  230. {
  231. biblioteka_obrazow = usuwanie_obrazu_z_biblioteki(biblioteka_obrazow, &wielkosc_biblioteki_obrazow, numer_edytowanego_obrazu, &flaga_usuniecia_obrazu_wew);
  232. if (flaga_usuniecia_obrazu_wew == 0)
  233. {
  234. printf("Obraz zostal pomyslnie usuniety.\n");
  235. flaga_usuniecia_obrazu = 0;
  236. flaga_wyboru_obrazu = 1;
  237. wielkosc_biblioteki_obrazow--;
  238.  
  239. if (wielkosc_biblioteki_obrazow == 1) // gdy mamy 1 obraz, wielksoc biblioteki to 2 -> jedna komorka zapelniona, jedna pusta ;
  240. { // usuniecie obrazu spowoduje zmniejszenie rozmiaru do 1; w bibliotece nie bedzie obrazow, nie bedzie tez zaladowanego obrazu
  241. flaga_zaladowania_do_biblioteki = 1;
  242. flaga_zaladowania_obrazu = 1;
  243. }
  244. }
  245. else // flaga = 1
  246. {
  247. printf("Nie udalo sie usunac obrazu.\n");
  248. flaga_usuniecia_obrazu = 1;
  249. }
  250. }
  251. else // flaga = 1
  252. {
  253. printf("Nie wybrano aktywnego obrazu!\n");
  254. }
  255. }
  256. else // flaga = 1
  257. {
  258. printf("Biblioteka obrazow jest pusta.\n");
  259. }
  260.  
  261. printf(" \nWielkosc biblioteki obrazow: %d.\n", wielkosc_biblioteki_obrazow);
  262. break;
  263.  
  264. case 6: // CASE 5 edycja obrazu
  265.  
  266. /*printf("\n Edycja aktywnego obrazu.\n");
  267. printf("1. Progowanie.\n");
  268. printf("2. Negatyw.\n");
  269. printf("3. Odbicie o kat 90 stopni.\n");
  270. printf("4. Odbicie wzgledem osi pionowej.\n");
  271. printf("5. Odbicie wzgledem osi poziomej.\n");
  272. printf("6. Histogram.\n");
  273. printf("7. Szum pieprz i sol.\n");
  274. printf("8. Filtr Gaussa.\n");
  275. printf("9. Filtr medianowy.\n");
  276. printf("10. Wyjscie z edytora obrazow/Powrot do menu glownego.\n");*/
  277.  
  278. do // petla wyboru opcji z menu
  279. {
  280.  
  281. printf("\n Edycja aktywnego obrazu.\n");
  282. printf("1. Progowanie.\n");
  283. printf("2. Negatyw.\n");
  284. printf("3. Odbicie o kat 90 stopni.\n");
  285. printf("4. Odbicie wzgledem osi pionowej.\n");
  286. printf("5. Odbicie wzgledem osi poziomej.\n");
  287. printf("6. Histogram.\n");
  288. printf("7. Szum pieprz i sol.\n");
  289. printf("8. Filtr Gaussa.\n");
  290. printf("9. Filtr medianowy.\n");
  291. printf("10. Wyjscie z edytora obrazow/Powrot do menu glownego.\n");
  292.  
  293. printf("\nWybierz ktores z narzedzi lub wcisnij 10 aby wrocic do menu glownego:\n");
  294.  
  295. do
  296. {
  297. while (scanf("%d", &wybor_narzedzia) == 0)
  298. {
  299. printf("BLAD, podales zly typ zmiennej.\n");
  300. while ((bufor = getchar()) != '\n');
  301. }
  302. while ((bufor = getchar()) != '\n'); // w razie gdy podamy 5__6
  303.  
  304. if (wybor_narzedzia < 1 || wybor_narzedzia > 10)
  305. {
  306. printf("BLAD - nie ma takiej opcji. Wybierz jeszcze raz.");
  307. }
  308. } while (wybor_narzedzia < 1 || wybor_narzedzia > 10);
  309.  
  310.  
  311. switch (wybor_narzedzia) // kolejne narzedzia
  312. {
  313. case 1: // PROGOWANIE
  314.  
  315. if (flaga_zaladowania_do_biblioteki == 0)
  316. {
  317. if (flaga_wyboru_obrazu == 0)
  318. {
  319. progowanie(biblioteka_obrazow, numer_edytowanego_obrazu);
  320. printf("Zastosowano progowanie.\n");
  321. }
  322. else
  323. {
  324. printf("Nie wybrano aktywnego obrazu!\n");
  325. }
  326.  
  327. }
  328. else
  329. {
  330. printf("Biblioteka obrazow jest pusta.\n");
  331. }
  332.  
  333. break;
  334.  
  335. case 2: // NEGATYW
  336.  
  337. if (flaga_zaladowania_do_biblioteki == 0)
  338. {
  339. if (flaga_wyboru_obrazu == 0)
  340. {
  341. negatyw(biblioteka_obrazow, numer_edytowanego_obrazu);
  342. printf("Zastosowano negatyw.\n");
  343. }
  344. else
  345. {
  346. printf("Nie wybrano aktywnego obrazu!\n");
  347. }
  348. }
  349. else
  350. {
  351. printf("Biblioteka obrazow jest pusta.\n");
  352. }
  353.  
  354. break;
  355.  
  356. case 3: // 90 STOPNI
  357.  
  358. if (flaga_zaladowania_do_biblioteki == 0)
  359. {
  360. if (flaga_wyboru_obrazu == 0)
  361. {
  362. obrot_90(biblioteka_obrazow, numer_edytowanego_obrazu, &flaga_edycji);
  363.  
  364. if (flaga_edycji == 0)
  365. {
  366. printf("Zastosowano obrot o kat 90 stopni.\n");
  367.  
  368. /*// zamieniamy wartosci szerokosci i wysokosci
  369. bufor1 = biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc;
  370. biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc = biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc;
  371. biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc = bufor1;*/
  372.  
  373. }
  374. else //flaga_edycji = 1
  375. {
  376. printf("Nie zastosowano obrot o kat 90 stopni.\n");
  377. }
  378. }
  379. else
  380. {
  381. printf("Nie wybrano aktywnego obrazu!\n");
  382. }
  383. }
  384. else
  385. {
  386. printf("Biblioteka obrazow jest pusta.\n");
  387. }
  388.  
  389. break;
  390.  
  391. case 4: // OS PIONOWA
  392.  
  393. if (flaga_zaladowania_do_biblioteki == 0)
  394. {
  395. if (flaga_wyboru_obrazu == 0)
  396. {
  397. odbicie_wzgl_osi_pionowej(biblioteka_obrazow, numer_edytowanego_obrazu);
  398. printf("Zastosowano obrot wokol osi pionowej.\n");
  399. }
  400. else
  401. {
  402. printf("Nie wybrano aktywnego obrazu!\n");
  403. }
  404. }
  405. else
  406. {
  407. printf("Biblioteka obrazow jest pusta.\n");
  408. }
  409.  
  410. break;
  411.  
  412. case 5: // OS POZIOMA
  413.  
  414. if (flaga_zaladowania_do_biblioteki == 0)
  415. {
  416. if (flaga_wyboru_obrazu == 0)
  417. {
  418.  
  419.  
  420. odbicie_wzgl_osi_poziomej(biblioteka_obrazow, numer_edytowanego_obrazu);
  421. printf("Zastosowano obrot wokol osi poziomej.\n");
  422. }
  423. else
  424. {
  425. printf("Nie wybrano aktywnego obrazu!\n");
  426. }
  427. }
  428. else
  429. {
  430. printf("Biblioteka obrazow jest pusta.\n");
  431. }
  432.  
  433. break;
  434.  
  435. case 6: //HISTOGRAM
  436.  
  437. if (flaga_zaladowania_do_biblioteki == 0)
  438. {
  439. if (flaga_wyboru_obrazu == 0)
  440. {
  441. histogram(biblioteka_obrazow, numer_edytowanego_obrazu);
  442. }
  443. else
  444. {
  445. printf("Nie wybrano aktywnego obrazu!\n");
  446. }
  447. }
  448. else
  449. {
  450. printf("Biblioteka obrazow jest pusta.\n");
  451. }
  452.  
  453. break;
  454.  
  455. case 7: // PIEPRZ I SOL
  456.  
  457. if (flaga_zaladowania_do_biblioteki == 0)
  458. {
  459. if (flaga_wyboru_obrazu == 0)
  460. {
  461. szum_pieprz_sol(biblioteka_obrazow, numer_edytowanego_obrazu);
  462. printf("Obraz zastal zaszumiony.\n");
  463. }
  464. else
  465. {
  466. printf("Nie wybrano aktywnego obrazu!\n");
  467. }
  468. }
  469. else
  470. {
  471. printf("Biblioteka obrazow jest pusta.\n");
  472. }
  473.  
  474. break;
  475.  
  476. case 8: // GAUSS
  477.  
  478. if (flaga_zaladowania_do_biblioteki == 0)
  479. {
  480. if (flaga_wyboru_obrazu == 0)
  481. {
  482. filtr_Gaussa(biblioteka_obrazow, numer_edytowanego_obrazu, &flaga_filtru);
  483. if (flaga_filtru == 0)
  484. {
  485. printf("Odfiltrowano obraz.\n");
  486. }
  487. else // flaga_filtru = 1
  488. {
  489. printf("Nie udalo sie odfiltrowac obrazu.\n");
  490. }
  491. }
  492. else
  493. {
  494. printf("Nie wybrano aktywnego obrazu!\n");
  495. }
  496. }
  497. else
  498. {
  499. printf("Biblioteka obrazow jest pusta.\n");
  500. }
  501.  
  502. break;
  503.  
  504. case 9: // MEDIANA
  505.  
  506. if (flaga_zaladowania_do_biblioteki == 0)
  507. {
  508. if (flaga_wyboru_obrazu == 0)
  509. {
  510. filtr_medianowy(biblioteka_obrazow, numer_edytowanego_obrazu, &flaga_filtru);
  511. if (flaga_filtru == 0)
  512. {
  513. printf("Odfiltrowano obraz.\n");
  514. }
  515. else // flaga_filtru = 1
  516. {
  517. printf("Nie udalo sie odfiltrowac obrazu.\n");
  518. }
  519. }
  520. else
  521. {
  522. printf("Nie wybrano aktywnego obrazu!\n");
  523. }
  524. }
  525. else
  526. {
  527. printf("Biblioteka obrazow jest pusta.\n");
  528. }
  529.  
  530. break;
  531.  
  532. default:
  533. if (wybor_narzedzia != 10)
  534. printf("Nie wybrales zadnej opcji!\n");
  535. break;
  536.  
  537.  
  538. }//koniec switcha narzedzi
  539.  
  540. } while (wybor_narzedzia != 10);
  541.  
  542. break; // koniec case'a edycji
  543.  
  544.  
  545. default:
  546. printf("Nie wybrales zadnej opcji!\n");
  547. break;
  548.  
  549. case 0: // CASE 0 wyjscie z programu
  550.  
  551. for (i = 0; i < wielkosc_biblioteki_obrazow; i++)
  552. {
  553. biblioteka_obrazow[i].nazwa_pliku = NULL;
  554. biblioteka_obrazow[i].typ_obrazu = NULL;
  555.  
  556. free(biblioteka_obrazow[i].nazwa_pliku);
  557. free(biblioteka_obrazow[i].typ_obrazu);
  558.  
  559. for (j = 0; j < biblioteka_obrazow[i].wysokosc; j++)
  560. {
  561. free(biblioteka_obrazow[i].piksele[j]); // breakpoint
  562. }
  563. biblioteka_obrazow[i].piksele = NULL;
  564. free(biblioteka_obrazow[i].piksele);
  565. }
  566. free(biblioteka_obrazow);
  567.  
  568. exit(10);
  569. break;
  570.  
  571.  
  572.  
  573. }// koniec switch-menu
  574. }// koniec while-menu
  575. }// koniec main
  576.  
  577. void odczyt_pliku_do_struktury(struct obraz *biblioteka_obrazow, int wielkosc_biblioteki_obrazow, int *flaga_zaladowania_obrazu) // str_obraz
  578. {
  579. int flagaBledu = 0;
  580. int flagaBledu1 = 0;
  581.  
  582. int i, j;
  583. FILE *plik;
  584.  
  585. biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].nazwa_pliku = malloc(100 * sizeof(char));
  586. biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].typ_obrazu = malloc(2 * sizeof(char));
  587.  
  588.  
  589. printf("Podaj nazwe pliku razem z rozszerzeniem.\n");
  590. scanf("%s", biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].nazwa_pliku);
  591.  
  592. plik = fopen(biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].nazwa_pliku, "r"); // .pgm
  593.  
  594. if (fopen(biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].nazwa_pliku, "r") == NULL)
  595. {
  596. *flaga_zaladowania_obrazu = 1;
  597. fflush(stdin);
  598. }
  599. else
  600. {
  601. sprawdz_komentarz(plik);
  602. fscanf(plik, "%c%c ", &biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].typ_obrazu[0], &biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].typ_obrazu[1]);
  603.  
  604. sprawdz_komentarz(plik);
  605. fscanf(plik, "%d", &biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].szerokosc);
  606.  
  607. sprawdz_komentarz(plik);
  608. fscanf(plik, "%d", &biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].wysokosc);
  609.  
  610. sprawdz_komentarz(plik);
  611. fscanf(plik, "%d", &biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].max_wart_szar);
  612.  
  613.  
  614. biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele = malloc(biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].wysokosc * sizeof(int*));
  615.  
  616. if (biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele != NULL)
  617. {
  618. for (i = 0; i < biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].wysokosc; i++)
  619. {
  620. biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele[i] = malloc(biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].szerokosc * sizeof(int));
  621.  
  622. if (biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele[i] != NULL)
  623. {
  624. flagaBledu1 = 0;
  625. }
  626. else
  627. {
  628. flagaBledu1 = 1;
  629. printf("BLAD w tworzeniu pikseli w wierszu!\n");
  630. break;
  631. }
  632. }
  633.  
  634. if (flagaBledu1)
  635. {
  636. for (j = 0; j <= i; j++)
  637. {
  638. free(biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele[j]);
  639. }
  640.  
  641. free(biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele);
  642.  
  643. }
  644. }
  645. else
  646. {
  647. printf("BLAD w tworzeniu pikseli w kolumnie!\n");
  648. flagaBledu = 1;
  649. }
  650. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  651.  
  652.  
  653. if (flagaBledu == 0 || flagaBledu1 == 0)
  654. {
  655. sprawdz_komentarz(plik);
  656.  
  657. for (i = 0; i < biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].wysokosc; i++)
  658. {
  659. for (j = 0; j < biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].szerokosc; j++)
  660. {
  661. sprawdz_komentarz(plik);
  662. fscanf(plik, "%d", &biblioteka_obrazow[wielkosc_biblioteki_obrazow - 1].piksele[i][j]);
  663. }
  664. }
  665. *flaga_zaladowania_obrazu = 0;
  666. fclose(plik);
  667. }
  668. else
  669. {
  670. printf("Nie zaladowano obrazu.\n");
  671. *flaga_zaladowania_obrazu = 1;
  672. fclose(plik);
  673. }
  674. }
  675. system("cls");
  676. }
  677.  
  678. void sprawdz_komentarz(FILE *plik)
  679. {
  680. char znak;
  681. fscanf(plik, "%c", &znak);
  682.  
  683.  
  684. while (znak == '#')
  685. {
  686. while (znak != '\n')
  687. {
  688. fscanf(plik, "%c", &znak);
  689. }
  690.  
  691. fscanf(plik, "%c", &znak);
  692. }
  693. fseek(plik, -1, SEEK_CUR);
  694.  
  695. }
  696.  
  697. struct obraz* dodawanie_obrazu_do_biblioteki(struct obraz *biblioteka_obrazow, int *wielkosc_biblioteki_obrazow, int *flaga_zaladowania_do_biblioteki_wew)
  698. {
  699. struct obraz *biblioteka_tymczasowa = NULL;
  700. biblioteka_tymczasowa = realloc(biblioteka_obrazow, (*wielkosc_biblioteki_obrazow + 1) * sizeof(struct obraz));
  701.  
  702. if (biblioteka_tymczasowa != NULL)
  703. {
  704. biblioteka_obrazow = biblioteka_tymczasowa;
  705. *flaga_zaladowania_do_biblioteki_wew = 0;
  706. //*wielkosc_biblioteki_obrazow++;
  707. }
  708. else
  709. {
  710. *flaga_zaladowania_do_biblioteki_wew = 1;
  711. }
  712. /// czy tutaj jest ok BO tutaj powiekszamy tylko rozmiar tablicy, obraz zostal juz dodany w funkcji odczytu z pliku i jest na wolnym miejscu; return bibliotek zawsze czy tylko gdy sie udalo?
  713. return biblioteka_obrazow;
  714. system("cls");
  715. }
  716.  
  717. struct obraz* usuwanie_obrazu_z_biblioteki(struct obraz *biblioteka_obrazow, int *wielkosc_biblioteki_obrazow, int numer_edytowanego_obrazu, int *flaga_usuniecia_obrazu_wew)
  718. {
  719.  
  720. int i;
  721. int j;
  722.  
  723. struct obraz *biblioteka_tymczasowa = NULL;
  724.  
  725. // czyscimy wszystko co zalokowane dynamicznie w danej strukturze
  726. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].nazwa_pliku);
  727. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].typ_obrazu);
  728.  
  729. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; j++)
  730. {
  731. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[j]);
  732. }
  733. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele);
  734.  
  735. // nadpisujemy usuwana strukture kolejna
  736. for (i = (numer_edytowanego_obrazu - 1); i < (*wielkosc_biblioteki_obrazow); i++)
  737. {
  738. biblioteka_obrazow[i] = biblioteka_obrazow[i + 1];
  739. }
  740.  
  741.  
  742. // realokujemy pamiec biblioteki na o 1 mniejsza
  743. biblioteka_tymczasowa = realloc(biblioteka_obrazow, (*wielkosc_biblioteki_obrazow - 1) * sizeof(struct obraz));
  744. if (biblioteka_tymczasowa != NULL)
  745. {
  746. // czy tu tez nie powinno sie zwalnaic (free) ktorejs tablicy ?
  747. biblioteka_obrazow = biblioteka_tymczasowa;
  748. *flaga_usuniecia_obrazu_wew = 0;
  749. }
  750. else
  751. {
  752. printf("Realokacja zakonczona niepowodzeniem.\n");
  753. *flaga_usuniecia_obrazu_wew = 1;
  754. free(biblioteka_tymczasowa);
  755. }
  756. // czy tu zwracamy biblioteke zawsze nawet jak sienie udala realokacja pamieci?
  757. // wielkosc_biblioteki_obrazow nigdy nie bd mniejsza niz 1
  758. //*wielkosc_biblioteki_obrazow--;
  759. return biblioteka_obrazow;
  760. system("cls");
  761. }
  762.  
  763. void zapis_do_pliku(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_zapisu)
  764. {
  765. FILE *plik;
  766.  
  767. int bufor;
  768. int k, j;
  769. char nazwa[20];
  770. *flaga_zapisu = 1;
  771.  
  772. printf("Podaj nazwe pliku do ktorego chcesz zapisac obraz razem z rozszerzeniem.\n");
  773.  
  774. while (scanf("%s", &nazwa) == 0)
  775. {
  776. printf("BLAD, podales zly typ zmiennej.\n");
  777. while ((bufor = getchar()) != '\n');
  778. }
  779. while ((bufor = getchar()) != '\n');
  780.  
  781.  
  782. plik = fopen(nazwa, "w");
  783.  
  784. if (fopen(nazwa, "w") == NULL)
  785. {
  786. printf("Nie udalo sie otworzyc pliku!\n");
  787. }
  788. else
  789. {
  790. fprintf(plik, "%c%c\n", biblioteka_obrazow[numer_edytowanego_obrazu - 1].typ_obrazu[0], biblioteka_obrazow[numer_edytowanego_obrazu - 1].typ_obrazu[1]);
  791. fprintf(plik, "%d %d\n", biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc, biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc);
  792. fprintf(plik, "%d\n", biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar);
  793.  
  794.  
  795.  
  796. for (k = 0; k < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; k++)
  797. {
  798. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  799. {
  800. fprintf(plik, "%d ", biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[k][j]);
  801. fprintf(plik, "\n");
  802. }
  803. }
  804. fprintf(plik, "\n");
  805. *flaga_zapisu = 0;
  806. }
  807. fclose(plik);
  808. system("cls");
  809. }
  810.  
  811.  
  812. void progowanie(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu)
  813. {
  814. int i, j;
  815. int prog;
  816. int bufor;
  817. printf("Maksymalny zakres szarosci obrazu: %d.", biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar);
  818.  
  819. printf("Podaj prog podzialu obrazu.\n");
  820.  
  821. do
  822. {
  823. while (scanf("%d", &prog) == 0)
  824. {
  825. printf("BLAD, podales zly typ zmiennej, sproboj jeszcze raz.\n");
  826. while ((bufor = getchar()) != '\n');
  827. }
  828. while ((bufor = getchar()) != '\n');
  829.  
  830. if (prog < 0 || prog > biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar)
  831. {
  832. printf("BLAD - podales zla liczbe. Wybierz jeszcze raz.");
  833. }
  834. } while (prog < 0 || prog > biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar);
  835.  
  836.  
  837. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  838. {
  839. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  840. {
  841. if (biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] < prog)
  842. {
  843. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] = 0;
  844. }
  845. else
  846. {
  847. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar;
  848. }
  849. }
  850. }
  851. system("cls");
  852. }
  853.  
  854. void negatyw(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu)
  855. {
  856. int i, j;
  857. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  858. {
  859. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  860. {
  861. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar - biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j];
  862. }
  863. }
  864. system("cls");
  865. }
  866.  
  867. void obrot_90(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_edycji)
  868. {
  869. int i, j, k;
  870. int flagaBledu = 0;
  871. int flagaBledu1 = 0;
  872. int **tablica_tymczasowa;
  873.  
  874. int bufor;
  875. *flaga_edycji = 1;
  876.  
  877. tablica_tymczasowa = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc * sizeof(*tablica_tymczasowa));
  878.  
  879. if (tablica_tymczasowa != NULL)
  880. {
  881. for (k = 0; k < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; k++)
  882. {
  883. tablica_tymczasowa[k] = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc * sizeof(int));
  884. if (tablica_tymczasowa[k] == NULL)
  885. {
  886. flagaBledu = 1;
  887. printf("BLAD w tworzeniu pamieci!\n");
  888. break;
  889. }
  890. }
  891. if (flagaBledu)
  892. {
  893. for (j = 0; j <= k; j++)
  894. {
  895. free(tablica_tymczasowa[j]);
  896. }
  897.  
  898. free(tablica_tymczasowa);
  899. }
  900. }
  901. else
  902. {
  903. printf("Blad w tworzeniu pamieci!\n");
  904. flagaBledu = 1;
  905. }
  906.  
  907. // napelniamy tymczasowa pikselami
  908. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; i++)
  909. {
  910. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; j++)
  911. {
  912. tablica_tymczasowa[j][i] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[j][i];
  913. }
  914. }
  915.  
  916. // czyscimy piksele
  917. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; j++)
  918. {
  919. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[j]);
  920. }
  921. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele);
  922.  
  923.  
  924. // zamieniamy wartosci szerokosci i wysokosci
  925. bufor = biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc;
  926. biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc = biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc;
  927. biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc = bufor;
  928. // wysokosc to szerokosc !!!!
  929. // szerokosc t owysokosc !!!!
  930.  
  931.  
  932. // zmienamy rozmiary tablicy pikseli
  933. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc * sizeof(*(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele)));
  934. if (biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele != NULL)
  935. {
  936. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  937. {
  938. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i] = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc * sizeof(**(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele)));
  939.  
  940. if (biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i] == NULL)
  941. {
  942. printf("Nie udalo sie zaalokowac pamieci w wierszu.\n");
  943. flagaBledu1 = 1;
  944. break;
  945. }
  946. }
  947. if (flagaBledu1)
  948. {
  949. for (j = 0; j <= k; j++)
  950. {
  951. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[j]);
  952. }
  953.  
  954. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele);
  955. }
  956. }
  957. else
  958. {
  959. printf("Nie udalo sie zaalokowac pamieci w kolumnie.\n");
  960. flagaBledu1 = 1;
  961. }
  962.  
  963. // przepisujemy piksele z tymczasowej do noweych pikseli
  964. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; i++)
  965. {
  966. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; j++)
  967. {
  968. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[j][i] = tablica_tymczasowa[i][j];
  969. }
  970. }
  971.  
  972.  
  973. // szyscimy tablice tymczasowa
  974. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  975. {
  976. free(tablica_tymczasowa[j]);
  977. }
  978. free(tablica_tymczasowa);
  979.  
  980. if (flagaBledu != 1 || flagaBledu1 != 1)
  981. {
  982. *flaga_edycji = 0;
  983. }
  984.  
  985. system("cls");
  986. }
  987.  
  988. void odbicie_wzgl_osi_pionowej(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu)
  989. {
  990. int i, j;
  991. int bufor;
  992.  
  993. for (i = 0; i < (int)biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  994. {
  995. for (j = 0; j < (int)(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc / 2); j++)
  996. {
  997. bufor = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j];
  998. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc - 1) - j];
  999. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc - 1) - j] = bufor;
  1000.  
  1001. }
  1002. }
  1003. system("cls");
  1004. }
  1005.  
  1006. void odbicie_wzgl_osi_poziomej(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu)
  1007. {
  1008. int i, j;
  1009. int bufor;
  1010.  
  1011. for (i = 0; i < (int)(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc / 2); i++)
  1012. {
  1013. for (j = 0; j < (int)biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  1014. {
  1015.  
  1016. bufor = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j]; // breakpoint
  1017. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc - 1) - j];
  1018. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc - 1) - j] = bufor;
  1019.  
  1020. /*
  1021. bufor = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j]; // breakpoint
  1022. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc - 1) - j];
  1023. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc - 1) - j] = bufor;*/
  1024.  
  1025. }
  1026. }
  1027. system("cls");
  1028. }
  1029.  
  1030. void histogram(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu)
  1031. {
  1032. int i, j;
  1033. int *tablica_histogram;
  1034. int wielkosc_tablicy = biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar + 1;
  1035.  
  1036. tablica_histogram = calloc(wielkosc_tablicy, sizeof(int)); // calloc napelani tablice 0, tablica jednowymiarowa o ilosci komorek odp. ilosci rodzajow pikseli
  1037.  
  1038. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1039. {
  1040. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  1041. {
  1042. tablica_histogram[biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j]]++; // nr. kom histogramu rowny aktualnej wartosci jest inkrementowany
  1043. }
  1044. }
  1045.  
  1046. FILE *plik;
  1047. plik = fopen("histogram.csv", "w");
  1048. if ("histogram.csv" != NULL)
  1049. {
  1050. for (i = 0; i < wielkosc_tablicy; i++)
  1051. {
  1052. fprintf(plik, "%d;%d \n", i, tablica_histogram[i]);
  1053. }
  1054. fclose(plik);
  1055. system("cls");
  1056. printf("Hisogram zostal zapisany do pliku histogram.csv\n");
  1057. }
  1058. else
  1059. {
  1060. system("cls");
  1061. printf("Blad - nie udalo sie utworzyc pliku.\n");
  1062. }
  1063. free(tablica_histogram);
  1064.  
  1065. }
  1066.  
  1067. void szum_pieprz_sol(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu)
  1068. {
  1069. srand((unsigned int)time(NULL));
  1070.  
  1071. int i;
  1072. int poz_wysokosc, poz_szerokosc;
  1073. int ilosc_pikseli;
  1074. int ilosc_zaszumionych_pikseli;
  1075. int kolor;
  1076. //int procent;
  1077. //int bufor;
  1078.  
  1079. /*printf("Podaj jaki procent wszystkich pikseli chcesz zaszumic.\n");
  1080.  
  1081. do
  1082. {
  1083. while (scanf("%d", &procent) == 0)
  1084. {
  1085. printf("BLAD, podales zly typ zmiennej, sproboj jeszcze raz.\n");
  1086. while ((bufor = getchar()) != '\n');
  1087. }
  1088. while ((bufor = getchar()) != '\n');
  1089.  
  1090. if (procent < 0 || procent > 100)
  1091. {
  1092. printf("BLAD - podales za duza liczbe.");
  1093. }
  1094. } while (procent < 0 || procent > 100);*/
  1095.  
  1096.  
  1097. ilosc_pikseli = biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc * biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc;
  1098. ilosc_zaszumionych_pikseli = (rand() % ilosc_pikseli) + 10000; // nie wiecej niz jest ich w sumie
  1099. //ilosc_zaszumionych_pikseli = ilosc_pikseli * (procent/100);
  1100.  
  1101. for (i = 0; i < ilosc_zaszumionych_pikseli; i++)
  1102. {
  1103. poz_wysokosc = (rand() % biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc);
  1104. poz_szerokosc = (rand() % biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc);
  1105. kolor = (rand() % 2);
  1106.  
  1107. if (kolor == 0)
  1108. {
  1109. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[poz_wysokosc][poz_szerokosc] = 0;
  1110. }
  1111. else
  1112. {
  1113. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[poz_wysokosc][poz_szerokosc] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].max_wart_szar;
  1114. }
  1115.  
  1116. }
  1117. system("cls");
  1118. }
  1119.  
  1120. void filtr_medianowy(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_filtru)
  1121. {
  1122. int i, j, r, s;
  1123. int m, n;
  1124. int flagaBledu = 0;
  1125. int flagaBledu1 = 0;
  1126. int licznik = 0;
  1127. int temp;
  1128.  
  1129. *flaga_filtru = 1;
  1130.  
  1131. int tablica_sortowanie[9];
  1132.  
  1133.  
  1134. int **tablica_tymczasowa;
  1135.  
  1136. tablica_tymczasowa = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc * sizeof(*biblioteka_obrazow)); // tymczasowa przyjmuje rozmiar pikseli
  1137.  
  1138. if (tablica_tymczasowa != NULL)
  1139. {
  1140. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1141. {
  1142. tablica_tymczasowa[i] = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc * sizeof(biblioteka_obrazow));
  1143.  
  1144. if (tablica_tymczasowa[i] == NULL)
  1145. {
  1146. flagaBledu = 1;
  1147. printf("BLAD w tworzeniu pikseli w wierszu!\n");
  1148. break;
  1149. }
  1150.  
  1151. }
  1152. if (flagaBledu)
  1153. {
  1154. for (j = 0; j <= i; j++)
  1155. {
  1156. free(tablica_tymczasowa[j]);
  1157. }
  1158.  
  1159. free(tablica_tymczasowa);
  1160.  
  1161. }
  1162. }
  1163. else
  1164. {
  1165. printf("BLAD w tworzeniu pikseli w kolumnie!\n");
  1166. flagaBledu1 = 1;
  1167. }
  1168.  
  1169. // przypisujemy do tablicy tymczasowej tablice pikseli -- nie mozna przejsciowa = biblioteka?
  1170. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1171. {
  1172. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  1173. {
  1174. tablica_tymczasowa[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j];
  1175. }
  1176. }
  1177.  
  1178.  
  1179.  
  1180. // napelnianie tablicy sortujacej i przypisanie mediany do tablicy tymczasowej
  1181. for (i = 1; i < (biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc - 2); i++)
  1182. {
  1183. for (j = 1; j < (biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc - 2); j++)
  1184. {
  1185.  
  1186. licznik = 0;
  1187. for (r = (i - 1); r < (i + 1); r++) // napelnianie tablicy sortujacej pikselami z wedrujacego okna 3x3
  1188. {
  1189. for (s = (j - 1); s < (j + 1); s++)
  1190. {
  1191. tablica_sortowanie[licznik] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[r][s];
  1192. licznik++;
  1193. }
  1194. }
  1195.  
  1196. //sortowanie(*tablica_sortowanie);
  1197.  
  1198. for (m = 0; m < 9; m++) // sortowanie babelkowe tablicy sortowania
  1199. {
  1200. for (n = m; n < 8; n++)
  1201. {
  1202. if (tablica_sortowanie[n] > tablica_sortowanie[n + 1])
  1203. {
  1204. temp = tablica_sortowanie[n];
  1205. tablica_sortowanie[n] = tablica_sortowanie[n + 1];
  1206. tablica_sortowanie[n + 1] = temp;
  1207. }
  1208. }
  1209. }
  1210.  
  1211. tablica_tymczasowa[i][j] = tablica_sortowanie[4];
  1212.  
  1213.  
  1214. }
  1215. }
  1216.  
  1217. //czyscimy piksele
  1218. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1219. {
  1220. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i]);
  1221. }
  1222. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele);
  1223.  
  1224.  
  1225. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele = tablica_tymczasowa;
  1226.  
  1227.  
  1228. if (flagaBledu != 1 || flagaBledu1 != 1)
  1229. {
  1230. *flaga_filtru = 0;
  1231. }
  1232. system("cls");
  1233. }
  1234.  
  1235. void filtr_Gaussa(struct obraz *biblioteka_obrazow, int numer_edytowanego_obrazu, int *flaga_filtru)
  1236.  
  1237. {
  1238. int i, j, r, s, m;
  1239. int flagaBledu = 0;
  1240. int flagaBledu1 = 0;
  1241. int suma_wag = 0;
  1242. int licznik = 0;
  1243. int suma = 0;
  1244.  
  1245. *flaga_filtru = 1;
  1246.  
  1247. int tablica_wag[9];
  1248. tablica_wag[0] = 1;
  1249. tablica_wag[1] = 2;
  1250. tablica_wag[2] = 1;
  1251. tablica_wag[3] = 2;
  1252. tablica_wag[4] = 4;
  1253. tablica_wag[5] = 2;
  1254. tablica_wag[6] = 1;
  1255. tablica_wag[7] = 2;
  1256. tablica_wag[8] = 1;
  1257.  
  1258. int tablica_piksele[9];
  1259.  
  1260. int **tablica_tymczasowa;
  1261.  
  1262. tablica_tymczasowa = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc * sizeof(*biblioteka_obrazow)); // tymczasowa przyjmuje rozmiar pikseli
  1263.  
  1264. if (tablica_tymczasowa != NULL)
  1265. {
  1266. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1267. {
  1268. tablica_tymczasowa[i] = malloc(biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc * sizeof(biblioteka_obrazow));
  1269.  
  1270. if (tablica_tymczasowa[i] == NULL)
  1271. {
  1272. flagaBledu = 1;
  1273. printf("BLAD w tworzeniu pikseli w wierszu!\n");
  1274. break;
  1275. }
  1276. }
  1277. if (flagaBledu)
  1278. {
  1279. for (j = 0; j <= i; j++)
  1280. {
  1281. free(tablica_tymczasowa[j]);
  1282. }
  1283.  
  1284. free(tablica_tymczasowa);
  1285. }
  1286. }
  1287. else
  1288. {
  1289. printf("BLAD w tworzeniu pikseli w kolumnie!\n");
  1290. flagaBledu1 = 1;
  1291. }
  1292.  
  1293.  
  1294. for (i = 0; i < 9; i++) // liczmy sume wag
  1295. {
  1296. suma_wag = suma_wag + tablica_wag[i];
  1297. }
  1298.  
  1299.  
  1300. // przypisujemy do tablicy tymczasowej tablice pikseli -- nie mozna przejsciowa = biblioteka?
  1301. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1302. {
  1303. for (j = 0; j < biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc; j++)
  1304. {
  1305. tablica_tymczasowa[i][j] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i][j];
  1306. }
  1307. }
  1308.  
  1309.  
  1310.  
  1311.  
  1312. for (i = 0; i < (biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc - 2); i++)
  1313. {
  1314. for (j = 0; j < (biblioteka_obrazow[numer_edytowanego_obrazu - 1].szerokosc - 2); j++)
  1315. {
  1316.  
  1317. licznik = 0;
  1318. for (r = i; r < (i + 3); r++) // napelnianie tablicy pikselami z wedrujacego okna 3x3
  1319. {
  1320. for (s = j; s < (j + 3); s++)
  1321. {
  1322. tablica_piksele[licznik] = biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[r][s];
  1323. licznik++;
  1324. }
  1325. }
  1326.  
  1327.  
  1328. for (m = 0; m < 9; m++) // mnozymy dany piksel z tablicy pikseli przez odpowiadajaca mu wage i sumujemy
  1329. {
  1330. suma = (tablica_piksele[m] * tablica_wag[m]);
  1331. }
  1332.  
  1333. tablica_tymczasowa[i + 1][j + 1] = suma / suma_wag;
  1334.  
  1335. }
  1336. }
  1337.  
  1338.  
  1339. //czyscimy piksele
  1340. for (i = 0; i < biblioteka_obrazow[numer_edytowanego_obrazu - 1].wysokosc; i++)
  1341. {
  1342. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele[i]);
  1343. }
  1344. free(biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele);
  1345.  
  1346.  
  1347.  
  1348. biblioteka_obrazow[numer_edytowanego_obrazu - 1].piksele = tablica_tymczasowa;
  1349.  
  1350. if (flagaBledu != 1 || flagaBledu1 != 1)
  1351. {
  1352. *flaga_filtru = 0;
  1353. }
  1354. system("cls");
  1355. }
  1356.  
  1357. void sortowanie(int *tablica_sortowanie)
  1358. {
  1359. int m, n;
  1360. int temp;
  1361.  
  1362. for (m = 0; m < 9; m++) // sortowanie babelkowe tablicy sortowania
  1363. {
  1364. for (n = m; n < 8; n++)
  1365. {
  1366. if (tablica_sortowanie[n] > tablica_sortowanie[n + 1])
  1367. {
  1368. temp = tablica_sortowanie[n];
  1369. tablica_sortowanie[n] = tablica_sortowanie[n + 1];
  1370. tablica_sortowanie[n + 1] = temp;
  1371. }
  1372. }
  1373. }
  1374.  
  1375. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement