-
Notifications
You must be signed in to change notification settings - Fork 0
/
obsluga_obrazu.c
119 lines (101 loc) · 4.13 KB
/
obsluga_obrazu.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// obsluga_obrazu.c
// Przetwarzanie_obrazów_1
//
// Created by Michał on 22.06.2018.
// Copyright © 2018 Michał. All rights reserved.
//
#include "obsluga_obrazu.h"
//--------------------------------------------------------------------------------------------------
int czytaj(FILE *_plik,int _obraz[MAX][MAX],int *_wymx,int *_wymy, int *_szarosci,char _komentarze[DL_LINII][DL_LINII]){
char buf[DL_LINII]; /* <- bufor pomocniczy do czytania naglowka i komentarzy */
int znak = '#'; /* <- zmienna pomocnicza do czytania komentarzy */
int koniec=0; /* <- czy napotkano koniec danych w pliku */
/* Sprawdzenie czy podano prawidłowy uchwyt pliku */
if (_plik==NULL) {
fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
return 0;
}
/* Sprawdzenie "numeru magicznego" - powinien być P2 */
if (fgets(buf,DL_LINII,_plik)==NULL) /* Wczytanie pierwszej linii pliku do bufora */
koniec=1; /* Nie udalo sie? Koniec danych! */
if ( (buf[0]!='P') || (buf[1]!='2') || koniec) { /* Czy jest magiczne "P2"? */
fprintf(stderr,"Blad: To nie jest plik PGM\n");
return 0;
}
/* Pominiecie komentarzy */
int i = 0;
do{
if((znak = fgetc(_plik)) == '#') {
if (fgets(buf,DL_LINII,_plik)==NULL){
koniec=1;
}
//przekopiowanie komentarzy do tablicy komentarzy
for (int j = 0; j < strlen(buf); ++j){
_komentarze[i][j] = buf[j];
}
++i;
}else ungetc(znak,_plik);
}while (znak=='#' && !koniec);
/* Pobranie wymiarow obrazu i liczby odcieni szarosci */
if (fscanf(_plik,"%d %d %d",_wymx,_wymy,_szarosci)!=3) {
fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
return 0;
}
/* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
for (int i=0;i<*_wymy;i++) {
for (int j=0;j<*_wymx;j++) {
if (fscanf(_plik,"%d",&(_obraz[i][j]))!=1) {
fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
return 0;
}
}
}
return 1; /* Czytanie zakonczone sukcesem */
}
//--------------------------------------------------------------------------------------------------
void wyswietl(char *_nazwa_pliku) {
char polecenie[DL_LINII];
strcpy(polecenie,"open ");
strcat(polecenie,_nazwa_pliku);
printf("%s\n",polecenie);
system(polecenie);
}
//--------------------------------------------------------------------------------------------------
int zapisz(FILE *_plik,int _obraz[MAX][MAX],int *_wymx,int *_wymy, int *_szarosci,char _komentarze[DL_LINII][DL_LINII]){
/* wpisanie na poczatek pliku "numeru magicznego" */
fprintf(_plik,"P2\n");
/* wpisanie do pliku komentarzy */
for(int i = 0; i < DL_LINII; ++i){
fprintf(_plik,"#");
for(int j = 0; j < DL_LINII; ++j){
fprintf(_plik,"%c",_komentarze[i][j]);
if(_komentarze[i][j] == '\n') break;
}
if(_komentarze[i+1][0] == 0) break;
}
/* wpisanie do pliku wymiarow obrazu */
fprintf(_plik,"%d %d \n",*_wymx,*_wymy);
/* wpisanie do pliku maksymalnego stopnia szarosci */
fprintf(_plik,"%d \n",*_szarosci);
/* wpisanie do pliku pikseli */
for(int i = 0; i < *_wymy; i++) {
for(int j = 0; j < *_wymx; j++) {
fprintf(_plik,"%d ",_obraz[i][j]);
}
}
return 0;
}
//--------------------------------------------------------------------------------------------------
void dodaj_komentarz(char _komentarze[DL_LINII][DL_LINII],char *_komentarz){
/* dodanie na koniec tablicy komentarzy nowego komentarza */
for(int i = 0; i < DL_LINII; ++i){
if(_komentarze[i][0] == '\0'){
for (int j = 0; j < strlen(_komentarz); ++j) {
_komentarze[i][j] = _komentarz[j];
}
break;
}
}
}
//--------------------------------------------------------------------------------------------------