Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.18 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <stdio.h>
  5. #include <locale.h>
  6. #include <Windows.h>
  7.  
  8. #define MAXSTRLEN 100
  9.  
  10. int odczyt_pliku(struct obraz* hp1);
  11. int zapis_pliku(struct obraz hp1);
  12. void czyszczenie_pamieci(struct obraz* hp1);
  13. void zwalnianie_blad(struct obraz* hp1, int ile);
  14. int obrot(struct obraz* hp1);
  15. void histogram(struct obraz* hp1);
  16. void negatyw(struct obraz* hp1);
  17. void pieprz_sol(struct obraz* hp1);
  18. int filtr(struct obraz* hp1);
  19. struct obraz kopia_zapasowa(struct obraz* hp1);
  20.  
  21. struct obraz
  22. {
  23. char* nazwa_pliku;
  24. char* standard;
  25. int szerokosc;
  26. int wysokosc;
  27. int zakres; //maksymalna wartosc piksela
  28. int** piksele; //tablica na piksele
  29. };
  30.  
  31. int main()
  32. {
  33. //zmienne wejsciowe do poruszania sie w menu
  34. int pomocnicza = 0;
  35. int krok_programu = 0;
  36. char nazwa[MAXSTRLEN];
  37. struct obraz* hp1;//deklaracja zmiennej strukturalnej
  38. hp1 = (struct obraz*)malloc(1 * sizeof(struct obraz));//alokacja pamieci
  39. struct obraz kopia_robocza;
  40. //do robienia kilku obrazow
  41. int wybranyObraz = 0;
  42. int dlugoscTablicyObrazow = 1;
  43. struct obraz* tablicaObrazow = malloc(1 * sizeof(struct obraz)); //deklaracja tablicy struktur - poczatkowo 1 element
  44. struct obraz* tablicaObrazow2; //deklaracja tablicy struktur pomocnicza do przepisywania
  45.  
  46.  
  47. srand(time(NULL));
  48.  
  49. //menu
  50. do
  51. {
  52. switch (krok_programu)
  53. {
  54. case 0: //miejsce na wprowadzanie danych przez uzytkownika i nastepnie przejscie do programu
  55. menu:
  56. puts("Menu");
  57. puts("1 - wczytaj plik");
  58. puts("2 - obrot obrazu");
  59. puts("3 - negatyw");
  60. puts("4 - szum");
  61. puts("5 - filtr");
  62. puts("6 - histogram");
  63. puts("7 - zapisz obraz");
  64. puts("8 - wyjscie z programu");
  65. puts("9 - wybor obrazu");
  66.  
  67. while (!scanf("%s", nazwa)) //pobieranie
  68. {
  69. char c;
  70. while (c = getchar() != '\n');
  71. }
  72.  
  73. system("cls");
  74.  
  75. if (!strcmp(nazwa, "8"))
  76. {
  77. krok_programu = 8;
  78. }
  79. else if (!strcmp(nazwa, "1"))
  80. {
  81. krok_programu = 1;
  82. }
  83. else if ((!strcmp(nazwa, "2")) && krok_programu == 10)
  84. {
  85. krok_programu = 2;
  86. }
  87. else if ((!strcmp(nazwa, "3")) && krok_programu == 10)
  88. {
  89. krok_programu = 3;
  90. }
  91. else if ((!strcmp(nazwa, "4")) && krok_programu == 10)
  92. {
  93. krok_programu = 4;
  94. }
  95. else if ((!strcmp(nazwa, "5")) && krok_programu == 10)
  96. {
  97. krok_programu = 5;
  98. }
  99. else if ((!strcmp(nazwa, "6")) && krok_programu == 10)
  100. {
  101. krok_programu = 6;
  102. }
  103. else if ((!strcmp(nazwa, "7")) && krok_programu == 10)
  104. {
  105. krok_programu = 7;
  106. }
  107. else if ((!strcmp(nazwa, "9")) && krok_programu == 10)
  108. {
  109. krok_programu = 9;
  110. }
  111. else
  112. {
  113. krok_programu = -1;
  114. }
  115.  
  116. break;
  117. case 1: //wczytywanie pliku
  118. if (odczyt_pliku(hp1))
  119. {
  120. puts("Poprawnie wczytano plik");
  121. kopia_robocza = kopia_zapasowa(hp1); //utworzenie kopii roboczej do dalszej obrobki obrazu
  122. puts("utworzono kopie robocza pliku");
  123.  
  124. //miejsce na realokacje tablicy struktur po udanym odczycie
  125. dlugoscTablicyObrazow++;
  126. tablicaObrazow2 = realloc(tablicaObrazow, dlugoscTablicyObrazow * sizeof(struct obraz));
  127. if (tablicaObrazow2 != NULL) //zabezpieczenie przed wysypaniem
  128. {
  129. tablicaObrazow = tablicaObrazow2;
  130. puts("nastapila realokacja tablicy");
  131. }
  132. else
  133. {
  134. free(tablicaObrazow2);
  135. puts("blad przy realokacji pamieci - powrot do menu");
  136. krok_programu = 0;
  137. }
  138. //koniec realokacji
  139.  
  140. //miejsce na przepisanie odczytanego pliku do tablicy struktur(1)
  141. tablicaObrazow[dlugoscTablicyObrazow - 2] = kopia_robocza;
  142. puts("odczytany obraz zostal przypisany do tablicy struktur");
  143. //wyswietlanie odczytanych obrazow
  144. /*
  145. puts("Obrazy ktore zostaly wczytane");
  146. for (int i = 0; i < dlugoscTablicyObrazow - 1; i++)
  147. {
  148. printf("[%d] - %s\n", i, (tablicaObrazow + i)->nazwa_pliku); //wyswietlanie nazwy pliku z tablicy
  149. }
  150. printf("\n");
  151. //koniec przepisywania(1)
  152.  
  153. //wybor obrazu
  154. puts("Ktory obraz chcesz wybrac ?");
  155. while (scanf("%d", &wybranyObraz) != 1) //dopóki nie uda się wczytać, zabezpieczenie na wybranie liczby calkowitej
  156. {
  157. printf("Podano zla wartosc\n");
  158. int d;
  159. while ((d = getchar()) != '\n' && d != EOF); //pętla wyciągająca znaki z bufora
  160. }
  161. kopia_robocza = tablicaObrazow[wybranyObraz]; //przepisanie kopii roboczej do wybranego elementu
  162. printf("\nwybrano [%d] - %s\n", wybranyObraz, tablicaObrazow[wybranyObraz]);
  163. //koniec wyboru obrazu
  164. */
  165. krok_programu = 10; //otwarcie bramki do edycji obrazu
  166. }
  167. else
  168. {
  169. printf("Problem z alokacja, zwalniam pamiec\n", 0);
  170. zwalnianie_blad(hp1, 0);
  171. krok_programu = 0;
  172. }
  173.  
  174. break;
  175. case 2: //obrot
  176. puts("Podaj wielokrotnosc kata 90 stopni:");
  177.  
  178. //zabezpieczenie aby wybrano cyfre z zakresu menu
  179. while (scanf("%d", &pomocnicza) != 1) //dopóki nie uda się wczytać
  180. {
  181. printf("Podano zla wartosc\n");
  182. int c;
  183. while ((c = getchar()) != '\n' && c != EOF); //pętla wyciągająca znaki z bufora
  184. }
  185. int pomocnicza1 = fabs(pomocnicza); //na wypadek wpisania ujemnej wartosci
  186. //koniec zabezpieczenia
  187.  
  188. //miejsce na funkcje do obrotu
  189. for (int i = 0; i < pomocnicza1; i++)
  190. {
  191. obrot(&kopia_robocza); //przekazanie kopii roboczej do edycji
  192. }
  193. puts("Wykonano obrot");
  194. Sleep(2000);
  195.  
  196. krok_programu = 10;
  197. break;
  198. case 9: //wybor obrazu
  199. //wyswietlanie odczytanych obrazow
  200. puts("Obrazy ktore zostaly wczytane");
  201. for (int i = 0; i < dlugoscTablicyObrazow - 1; i++)
  202. {
  203. printf("[%d] - %s\n", i, (tablicaObrazow + i)->nazwa_pliku); //wyswietlanie nazwy pliku z tablicy
  204. }
  205. printf("\n");
  206. //koniec przepisywania(1)
  207.  
  208. //wybor obrazu
  209. puts("Ktory obraz chcesz wybrac ?");
  210. while (scanf("%d", &wybranyObraz) != 1) //dopóki nie uda się wczytać, zabezpieczenie na wybranie liczby calkowitej
  211. {
  212. printf("Podano zla wartosc\n");
  213. int d;
  214. while ((d = getchar()) != '\n' && d != EOF); //pętla wyciągająca znaki z bufora
  215. }
  216. kopia_robocza = tablicaObrazow[wybranyObraz]; //przepisanie kopii roboczej do wybranego elementu
  217. printf("\nwybrano [%d] - %s\n", wybranyObraz, tablicaObrazow[wybranyObraz]);
  218. //koniec wyboru obrazu
  219. krok_programu = 10;
  220. break;
  221. case 3: //negatyw
  222. negatyw(&kopia_robocza);
  223. puts("wykonano negatyw");
  224. Sleep(2000);
  225.  
  226. krok_programu = 10;
  227. break;
  228.  
  229. case 4: //szum
  230. pieprz_sol(&kopia_robocza);
  231. puts("wykonano szum - efekt sol i pieprz");
  232. Sleep(2000);
  233.  
  234. krok_programu = 10;
  235. break;
  236. case 5: //filtr
  237. filtr(&kopia_robocza);
  238. puts("wykonano filtr");
  239. Sleep(2000);
  240.  
  241. krok_programu = 10;
  242. break;
  243. case 6: //histogram
  244. histogram(&kopia_robocza);
  245. puts("histogram zostal utworzony");
  246. Sleep(2000);
  247.  
  248. krok_programu = 10;
  249. break;
  250. case 7: //zapisz obraz
  251. if (zapis_pliku(kopia_robocza)) //procedura zapisywania obrazu
  252. {
  253. puts("Plik zostal zapisany");
  254. puts("Powrot do menu - nastapilo czyszczenie pamieci");
  255. krok_programu = 10;
  256. }
  257. else
  258. {
  259. puts("Nie udalo sie zapisac pliku");
  260. puts("Powrot do menu - nastapilo czyszczenie pamieci");
  261. krok_programu = 10;
  262. }
  263.  
  264. czyszczenie_pamieci(hp1); //procedura czyszczenia pamieci
  265.  
  266. krok_programu = 0;
  267. break;
  268. case 8: //wyjscie
  269. break;
  270. case 10:
  271. goto menu;
  272. break;
  273. }
  274.  
  275.  
  276. if (krok_programu == -1) //czyszczenie dla porzadku + informacja o wprowadzeniu zlej zmiennej
  277. {
  278. system("cls");
  279. puts("wprowadzono zla wartosc\n");
  280. krok_programu = 0;
  281. }
  282.  
  283. } while (krok_programu != 8);
  284. }
  285.  
  286. void histogram(struct obraz* hp1)//to dziala, problem z zapisem
  287. {
  288. int i, j, z;
  289. int licznik = 0;
  290. int max = 0;
  291. int* tab;
  292. //deklaracja tablicy na zapisywanie wynikow do histogramu
  293. tab = (int**)malloc(hp1->zakres * sizeof(int));
  294.  
  295. for (z = 0; z < hp1->zakres + 1; z++) //+1 bo nie lapalo maksymalnej wartosci piksela
  296. {
  297. for (i = 0; i < hp1->wysokosc; i++)
  298. {
  299. for (j = 0; j < hp1->szerokosc; j++)
  300. {
  301. if (hp1->piksele[i][j] == z)
  302. {
  303. licznik++;
  304. }
  305.  
  306. }
  307. }
  308. //printf("pikseli o wartosci [%d] jest %d\n", z, licznik); //wyswietlanie czy dziala poprawnie
  309. tab[z] = licznik;
  310. licznik = 0;
  311. }
  312.  
  313. //zapis do pliku csv
  314.  
  315. FILE* plik;
  316.  
  317. z = 0;
  318. plik = fopen("histogram.csv", "w");
  319.  
  320. if (plik == NULL)//czy plik sie otworzyl
  321. {
  322. perror("histogram.csv");//komunikat dlaczego blad
  323.  
  324. }
  325.  
  326. for (z = 0; z < hp1->zakres + 1; z++)
  327. {
  328. fprintf(plik, "%d; %d\n", z, tab[z]);
  329.  
  330. }
  331.  
  332. fclose(plik);
  333.  
  334. }
  335.  
  336. int filtr(struct obraz* hp1)
  337. {
  338. int gauss[3][3] = {
  339. {1,2,1},
  340. {2,4,2},
  341. {1,2,1}
  342. }; //deklaracja okienka
  343.  
  344. int i, j, k, l;
  345. int okno = 0;
  346. int suma = 16;
  347. struct obraz kopia_robocza;
  348. kopia_robocza = kopia_zapasowa(hp1);
  349.  
  350. for (i = 0; i < hp1->wysokosc - 2; i++)
  351. {
  352. for (j = 0; j < hp1->szerokosc - 2; j++)
  353. {
  354. for (k = 0; k < 3; k++)
  355. {
  356. for (l = 0; l < 3; l++)
  357. {
  358. okno = okno + kopia_robocza.piksele[i + k][j + l] * gauss[k][l];
  359. }
  360. }
  361. hp1->piksele[i + 1][j + 1] = okno / suma;
  362. okno = 0;
  363. }
  364. }
  365.  
  366. for (i = 0; i < kopia_robocza.wysokosc; i++)
  367. {
  368. free(kopia_robocza.piksele[i]);
  369. }
  370. free(kopia_robocza.piksele);
  371.  
  372. return 0;
  373. }
  374.  
  375. void pieprz_sol(struct obraz* hp1)
  376. {
  377. int i, j;
  378. for (i = 0; i < hp1->wysokosc; i++)
  379. {
  380. for (j = 0; j < hp1->szerokosc; j++)
  381. {
  382. if (rand() % 11 < 1)//prawdopodobienstwo
  383. {
  384. if (rand() % 2) hp1->piksele[i][j] = 0;
  385. else
  386. {
  387. hp1->piksele[i][j] = hp1->zakres;
  388. }
  389. }
  390.  
  391. }
  392. }
  393. }
  394.  
  395. void negatyw(struct obraz* hp1)
  396. {
  397. int i, j;
  398. for (i = 0; i < hp1->wysokosc; i++)
  399. {
  400. for (j = 0; j < hp1->szerokosc; j++)
  401. {
  402. hp1->piksele[i][j] = hp1->zakres - hp1->piksele[i][j];//wzor z instrukcji
  403. }
  404. }
  405.  
  406. }
  407.  
  408. int obrot(struct obraz* hp1)
  409. {
  410. int i, j;
  411. struct obraz kopia_robocza;
  412. kopia_robocza = kopia_zapasowa(hp1);//utworzenie lokalnej kopi
  413. for (i = 0; i < hp1->wysokosc; i++)//pamiec sie sypala dlatego czyszczenie
  414. {
  415. free(hp1->piksele[i]);
  416. }
  417. free(hp1->piksele);
  418.  
  419. hp1->szerokosc = kopia_robocza.wysokosc;//przepisanie wartosci
  420. hp1->wysokosc = kopia_robocza.szerokosc;
  421. hp1->piksele = (int**)malloc(hp1->wysokosc * sizeof(int));//alokacja
  422. if (hp1->piksele != NULL)
  423. {
  424. for (i = 0; i < hp1->wysokosc; i++)
  425. {
  426. hp1->piksele[i] = (int*)malloc(hp1->szerokosc * sizeof(int));
  427. if (hp1->piksele == NULL)
  428. return 1;
  429. }
  430. }
  431. for (i = 0; i < hp1->wysokosc; i++)
  432. {
  433. for (j = 0; j < hp1->szerokosc; j++)
  434. {
  435. hp1->piksele[i][j] = kopia_robocza.piksele[j][kopia_robocza.szerokosc - i - 1];//obrot
  436. }
  437. }
  438. for (i = 0; i < kopia_robocza.wysokosc; i++)
  439. {
  440. free(kopia_robocza.piksele[i]);//zwalnianie lokalnej
  441. }
  442. free(kopia_robocza.piksele);
  443.  
  444. return 0;
  445. }
  446.  
  447. void zwalnianie_blad(struct obraz* hp1, int ile)
  448. {
  449. for (int i = 0; i < ile; i++)
  450. {
  451. free((hp1->piksele[i]));
  452. }
  453. free((hp1->piksele));
  454.  
  455. }
  456.  
  457. struct obraz kopia_zapasowa(struct obraz* hp1)//kopia robocza aby mozna ten sam obraz przekształcać
  458. {
  459. int i, j;
  460. struct obraz kopia_robocza;
  461. kopia_robocza.zakres = hp1->zakres;//przepisanie wartosci
  462. kopia_robocza.szerokosc = hp1->szerokosc;
  463. kopia_robocza.wysokosc = hp1->wysokosc;
  464. kopia_robocza.standard = hp1->standard;
  465. kopia_robocza.nazwa_pliku = hp1->nazwa_pliku;
  466. kopia_robocza.piksele = (int**)malloc(hp1->wysokosc * sizeof(int));//alokacja pamieci
  467. if (kopia_robocza.piksele != NULL)
  468. {
  469. for (i = 0; i < hp1->wysokosc; i++)
  470. {
  471. kopia_robocza.piksele[i] = (int*)malloc(hp1->szerokosc * sizeof(int));
  472. if (kopia_robocza.piksele == NULL)
  473. {
  474. printf("problem z alokacja pamieci dla tablicy dynamicznej");
  475. zwalnianie_blad(&kopia_robocza, i);
  476. }
  477. }
  478. }
  479. else printf("problem z alokacja pamieci dla tablicy dynamicznej");
  480. for (i = 0; i < hp1->wysokosc; i++)
  481. {
  482. for (j = 0; j < hp1->szerokosc; j++)
  483. {
  484. kopia_robocza.piksele[i][j] = hp1->piksele[i][j];
  485.  
  486. }
  487. }
  488. return kopia_robocza;
  489.  
  490. }
  491.  
  492. void czyszczenie_pamieci(struct obraz* hp1)
  493. {
  494.  
  495. for (int i = 0; i < (hp1->wysokosc); i++)
  496. {
  497. free((hp1->piksele[i]));
  498. }
  499. free((hp1->piksele));
  500.  
  501. }
  502.  
  503. int zapis_pliku(struct obraz hp1)
  504. {
  505. FILE* plik;
  506. char x = 0;
  507. hp1.nazwa_pliku = (char*)malloc(100 * sizeof(char));//alokacja tablicy z nazwa
  508. puts("Podaj nazwe pliku:");
  509. scanf("%s", hp1.nazwa_pliku);//wczytanie nazyw obrazu
  510. plik = fopen(hp1.nazwa_pliku, "w");//otwarcie pliku o podanej nazwie
  511. if (plik == NULL)//czy plik sie utworzyl
  512. {
  513. return 0;
  514. }
  515.  
  516. fprintf(plik, "%s\n", &hp1.standard);
  517. fprintf(plik, "%d %d\n", hp1.szerokosc, hp1.wysokosc);
  518. fprintf(plik, "%d\n", hp1.zakres);
  519.  
  520. for (int i = 0; i < hp1.wysokosc; i++)//wpisanie wartosci z pliku
  521. {
  522. for (int j = 0; j < hp1.szerokosc; j++)
  523. {
  524.  
  525. fprintf(plik, "%d ", hp1.piksele[i][j]);
  526.  
  527. }
  528. fprintf(plik, "\n");
  529. }
  530. fclose(plik);
  531. Sleep(1000);
  532.  
  533. return 1;
  534. }
  535.  
  536.  
  537. int odczyt_pliku(struct obraz* hp1)
  538. {
  539. FILE* plik;
  540. char komentarze;
  541. hp1->nazwa_pliku = (char*)malloc(100 * sizeof(char));//alokacja tablicy z nazwa
  542. nazwa:
  543. printf("Podaj nazwe pliku:\n");
  544. scanf("%s", hp1->nazwa_pliku);//wczytanie nazwy obrazu
  545.  
  546.  
  547. plik = fopen(hp1->nazwa_pliku, "r");//otwarcie pliku o podanej nazwie
  548. if (plik == NULL)//czy plik sie otworzyl
  549. {
  550. puts("Plik nie zostal odnaleziony");//komunikat dlaczego blad
  551. goto nazwa;
  552. }
  553. else
  554. {
  555. puts("Znaleziono plik");
  556. puts("Trwa wczytywanie pliku");
  557. }
  558.  
  559. //czytanie standardu
  560. //Jezeli napotka # to usuwa wszystko co jest dalej po nim (wrzuca do zmiennej komentarz ktora przyjmuje kolejno wartosci pobrane) az do nowej lini a jezeli nie bedzie to # to sie cofnie o 1 i zapisze to wszystko do standardu
  561.  
  562. fscanf(plik, "%c", &komentarze); //czytanie pojedynczego znaku
  563. while (komentarze == '#')//szukanie komentarzy
  564. {
  565. while (komentarze != '\n')//dopoki nie jest nowa linia (spacja)
  566. {
  567. fscanf(plik, "%c", &komentarze);
  568.  
  569. }
  570. fscanf(plik, "%c", &komentarze);//przeskok do nowej lini
  571. }
  572.  
  573. fseek(plik, -1, SEEK_CUR); //przesuniecie znacznika pliku o jeden w tył
  574. fscanf(plik, "%s\n", &hp1->standard);//musi być na adres :)(hp1->wysokosc) * sizeof&(hp1->piksele) //czytanie do nowej linii
  575.  
  576. //czytanie szerokosci
  577. //taka sama zasada
  578.  
  579. fscanf(plik, "%c", &komentarze);
  580. while (komentarze == '#')
  581. {
  582. while (komentarze != '\n')
  583. {
  584. fscanf(plik, "%c", &komentarze);
  585.  
  586. }
  587. fscanf(plik, "%c", &komentarze);
  588.  
  589. }
  590.  
  591. fseek(plik, -1, SEEK_CUR);
  592. fscanf(plik, "%d", &hp1->szerokosc);
  593.  
  594. //czytanie wysokosci
  595.  
  596. fscanf(plik, "%c", &komentarze);
  597. while (komentarze == '#')
  598. {
  599. while (komentarze != '\n')
  600. {
  601. fscanf(plik, "%c", &komentarze);
  602.  
  603. }
  604. fscanf(plik, "%c", &komentarze);
  605.  
  606. }
  607.  
  608. fseek(plik, -1, SEEK_CUR);
  609. fscanf(plik, "%d", &hp1->wysokosc);
  610.  
  611. //czytanie maksWartosciSzarosci
  612.  
  613. fscanf(plik, "%c", &komentarze);
  614. while (komentarze == '#')
  615. {
  616. while (komentarze != '\n')
  617. {
  618. fscanf(plik, "%c", &komentarze);
  619.  
  620. }
  621. fscanf(plik, "%c", &komentarze);
  622.  
  623. }
  624. fseek(plik, -1, SEEK_CUR);
  625. fscanf(plik, "%d", &hp1->zakres);
  626.  
  627. //DEKLARACJA pamieci na tablice 2 wymiary
  628.  
  629. hp1->piksele = (int**)malloc(hp1->wysokosc * sizeof(int)); //tworzenie tablicy dynamicznej w pionie
  630. if (hp1->piksele != NULL)
  631. {
  632. for (int i = 0; i < (hp1->wysokosc); i++)
  633. {
  634.  
  635. hp1->piksele[i] = (int*)malloc(hp1->szerokosc * sizeof(int)); //tworzenie tablic dynamicznych w poziomie - w kazdym elemencie tablicy z pionu powstaje tablica w poziomie tworzac macierz
  636. if (hp1->piksele[i] == NULL)
  637. {
  638. return i;
  639. }
  640.  
  641. }
  642.  
  643. //Odczytanie wartosci pikseli z pliku i przepisanie ich do utworzonej tablicy dynamicznej
  644.  
  645. for (int i = 0; i < hp1->wysokosc; i++)
  646. {
  647. for (int j = 0; j < hp1->szerokosc; j++)
  648. {
  649. fscanf(plik, "%c", &komentarze);//czyta znak
  650.  
  651.  
  652. while (komentarze == '#')//jezeli komentarz
  653. {
  654. while (komentarze != '\n')//dopóki nie \n
  655. {
  656. fscanf(plik, "%c", &komentarze);
  657.  
  658. }
  659. fscanf(plik, "%c", &komentarze);
  660.  
  661. }
  662. fseek(plik, -1, SEEK_CUR); //jezeli nie komentarz to cofa sie o 1
  663. fscanf(plik, "%d", &hp1->piksele[i][j]); //i pobiera go do macierzy
  664. }
  665.  
  666. }
  667. printf("standard:%s\n", &hp1->standard);
  668. }
  669. else
  670. {
  671. puts("problem z alokacja tablicy");
  672. fclose(plik);
  673. return 0;
  674. }
  675.  
  676. fclose(plik);
  677. return 1;
  678.  
  679. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement