Advertisement
Hadix

obraz odczytywanie w mainie

Nov 19th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.57 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>;
  3. #include <stdlib.h>;
  4. #include <string.h>
  5.  
  6. int **wczytywanieObrazu(int *wys);
  7.  
  8. struct obraz
  9. {
  10.     char nazwaObrazu[100];
  11.     char typ[3];
  12.     int wys;
  13.     int szer;
  14.     int maxszar;
  15.  
  16. };
  17.  
  18. int main()
  19. {
  20.     int szer = 0;
  21.     int wys=0;
  22.     struct obraz ob1;
  23.     ob1.wys = wys;
  24.     ob1.szer = 10;
  25.     ob1.maxszar = 1;
  26.     strcpy(ob1.typ, "P2");
  27.     strcpy(ob1.nazwaObrazu, "obraz.txt");
  28.     printf("Nazwa obrazu: %s\n", ob1.nazwaObrazu);
  29.     printf("Wys: %d\n", ob1.wys);
  30.     printf("Szer: %d\n", ob1.szer);
  31.     printf("Maxszar: %d\n", ob1.maxszar);
  32.     printf("Typ: %s\n", ob1.typ);
  33.  
  34.     int **odczyt=0;
  35.     char wybor[10];
  36.     int a = 1;
  37.     int i = 0;
  38.     int j = 0;
  39.     puts("Wcisnij:\nq - Wczytaj obraz\nk - Zamknij porgram\nc - Wyczysc ekran");
  40.     while (a == 1) {
  41.         do {
  42.             scanf("%s", &wybor);
  43.         } while (wybor[0] != 'q' && wybor[0] != 'c' && wybor[0] != 'k');
  44.         printf("wysokosc: %d", wys);
  45.         printf("szerokosc: %d", szer);
  46.         switch (wybor[0]) {
  47.         case 'q':
  48.             odczyt = wczytywanieObrazu(&wys, &szer);
  49.             printf("\n");
  50.             for (int i = 0; i < wys; i++) {
  51.                 printf("\n");
  52.                 for (int j = 0; j < 9; j++) {
  53.                     printf("%d ",odczyt[i][j]);
  54.                 }
  55.             }
  56.             break;
  57.         case 'k':
  58.             a = 0;
  59.             break;
  60.         case 'c':
  61.             system("cls");
  62.             break;
  63.         }
  64.         if (a == 1)
  65.             puts("\nWcisnij:\nq - Wczytaj obraz\nk - Zamknij porgram\nc - Wyczysc ekran");
  66.  
  67.        
  68.     }
  69. }
  70.  
  71. int **wczytywanieObrazu(int *wys, int *szer)
  72. {
  73.     int** odczyt;
  74.     char nazwaPliku[15];
  75.     char znak;
  76.     char typ[3];
  77.     int i = 0;
  78.     int j = 0;
  79.     //int wys,
  80.     //int   szer,
  81.     int maxszar;   // wysokosc, szerokosc, maskymalna szarosc
  82.     char linia[100];
  83.     puts("Podaj nazwe obrazu do wczytania");
  84.     scanf("%s", &nazwaPliku);
  85.     FILE* plik = fopen(nazwaPliku, "r");
  86.     if (plik == NULL)
  87.         printf("Obraz o tej nazwie nie istnieje\n");
  88.     else {
  89.         fscanf(plik, "%s", typ);
  90.         printf("%s\n", typ);
  91.         fgets(linia, 100, plik);
  92.         if (typ[0] == 'P' && (typ[1] == '2' || typ[1] == '5')) {
  93.             printf("Prawidlowy typ\n");
  94.             fscanf(plik, "%c", &znak);
  95.             if (znak == '#') {
  96.                 fgets(linia, 100, plik);
  97.                 fscanf(plik, "%d %d", wys, szer);
  98.                 printf("%d %d\n", *wys, *szer);
  99.             }
  100.             else {
  101.                 fseek(plik, -1, SEEK_CUR);
  102.                 fscanf(plik, "%d %d", wys, szer);
  103.                 printf("%d %d\n", *wys, *szer);
  104.             }
  105.             fgets(linia, 100, plik);
  106.             fscanf(plik, "%c", &znak);
  107.             if (znak == '#') {
  108.                 fgets(linia, 100, plik);
  109.                 fscanf(plik, "%d", &maxszar);
  110.                 printf("%d\n", maxszar);
  111.             }
  112.             else {
  113.                 fseek(plik, -1, SEEK_CUR);
  114.                 fscanf(plik, "%d", &maxszar);
  115.                 printf("%d\n", maxszar);
  116.             }
  117.             odczyt = malloc(*wys, sizeof(*odczyt));
  118.             if (odczyt != NULL)
  119.             {
  120.                 for (int a = 0; a < *wys; a++)
  121.                 {
  122.                     odczyt[a] = malloc(*szer, sizeof(odczyt));
  123.                     if (odczyt[a] == NULL)
  124.                         free(odczyt);
  125.                 }
  126.             }
  127.  
  128.             fgets(linia, 100, plik);
  129.             fscanf(plik, "%c", &znak);
  130.  
  131.             if (znak == '#') {
  132.                 fgets(linia, 100, plik);
  133.                 for (int i = 0; i < *wys; i++) {
  134.                     for (int j = 0; j < *szer; j++) {
  135.                         fscanf(plik, "%d ", odczyt[i][j]);
  136.                     }
  137.                 }
  138.                 for (int g = 0; g < *wys; g++) {
  139.                     printf("\n");
  140.                     for (int h = 0; h < *szer; h++) {
  141.                         printf("%d ", odczyt[g][h]);
  142.                     }
  143.                 }
  144.  
  145.             }
  146.             else {
  147.  
  148.                 fseek(plik, -1, SEEK_CUR);
  149.                 for (int i = 0; i < *wys; i++) {
  150.                     for (int j = 0; j < *szer; j++) {
  151.                         fscanf(plik, "%d ", &odczyt[i][j]);
  152.                     }
  153.                 }
  154.  
  155.                 for (int g = 0; g < *wys; g++) {
  156.                     printf("\n");
  157.                     for (int h = 0; h < *szer; h++) {
  158.                         printf("%d ", odczyt[g][h]);
  159.                     }
  160.                 }
  161.             }
  162.                
  163.            
  164.         }
  165.         else {
  166.             printf("nieprawidlowy typ");
  167.         }
  168.     }
  169.     return odczyt;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement