Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #define MAX 512 /* Maksymalny rozmiar wczytywanego obrazu */
- #define DL_LINII 1024 /* Dlugosc buforow pomocniczych */
- /************************************************************************************ \
- * Funkcja wczytuje obraz PGM z pliku do tablicy * \
- \
- * \param[in] plik_we uchwyt do pliku z obrazem w formacie PGM * \
- * \param[out] obraz_pgm tablica, do ktorej zostanie zapisany obraz * \
- * \param[out] wymx szerokosc obrazka * \
- * \param[out] wymy wysokosc obrazka * \
- * \param[out] szarosci liczba odcieni szarosci * \
- * \return liczba wczytanych pikseli * \
- ************************************************************************************/
- /*Czytaj*/
- int czytaj(FILE *plik_we,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
- 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 */
- int i,j;
- /*Sprawdzenie czy podano prawid?owy uchwyt pliku */
- if (plik_we ==NULL) {
- fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
- return(0);
- }
- /* Sprawdzenie "numeru magicznego" - powinien by? P2 */
- if (fgets(buf,DL_LINII,plik_we)==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 */
- do {
- if ((znak=fgetc(plik_we))=='#') { /* Czy linia rozpoczyna sie od znaku '#'? */
- if (fgets(buf,DL_LINII,plik_we)==NULL) /* Przeczytaj ja do bufora */
- koniec=1; /* Zapamietaj ewentualny koniec danych */
- } else {
- ungetc(znak,plik_we); /* Gdy przeczytany znak z poczatku linii */
- } /* nie jest '#' zwroc go */
- } while (znak=='#' && !koniec); /* Powtarzaj dopoki sa linie komentarza */
- /* i nie nastapil koniec danych */
- /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
- if (fscanf(plik_we,"%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 (i=0;i<*wymy;i++) {
- for (j=0;j<*wymx;j++) {
- if (fscanf(plik_we,"%d",&(obraz_pgm[i][j]))!=1) {
- fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
- return(0);
- }
- }
- }
- return *wymx**wymy; /* Czytanie zakonczone sukcesem */
- } /* Zwroc liczbe wczytanych pikseli */
- /*Wsywietl*/
- /* Wyswietlenie obrazu o zadanej nazwie za pomoca programu "display" */
- void wyswietl(char *n_pliku) {
- char polecenie[DL_LINII]; /* bufor pomocniczy do zestawienia polecenia */
- strcpy(polecenie,"display "); /* konstrukcja polecenia postaci */
- strcat(polecenie,n_pliku); /* display "nazwa_pliku" & */
- strcat(polecenie," &");
- printf("%s\n",polecenie); /* wydruk kontrolny polecenia */
- system(polecenie); /* wykonanie polecenia */
- }
- /*Zapisz*/
- /************************************************************************************ \
- * Funkcja wczytuje obraz PGM z tablicy do pliku \
- \ param[out] plik_wy uchwyt do pliku z obrazem w formacie PGM \
- \ param[in] obraz_pgm tablica, do ktorej zostanie zapisany obraz \
- \ param[in] wymx szerokosc obrazka \
- \ param[in] wymy wysokosc obrazka \
- \ param[in] szarosci liczba odcieni szarosci \
- \ return liczba wczytanych pikseli **********\
- **************************************************************************/
- int zapisz(FILE *plik_wy,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
- int i,j;
- /*Sprawdzenie czy podano ooowy uchwyt pliku */
- if (plik_wy==NULL) {
- fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
- return(0);}
- fprintf(plik_wy,"P2\n %d %d\n %d\n", *wymx,*wymy,*szarosci); /*pobranie wartosci do nowego pliku*/
- /* Pobranie obrazu z tablicy i zapisanie obraz_pgm*/
- for (i=0;i<*wymy;i++) {
- for (j=0;j<*wymx;j++) {
- fprintf(plik_wy,"%d ",(obraz_pgm[i][j]));
- }
- fprintf(plik_wy,"\n");
- }
- return (*wymx)*(*wymy); /* Zapisywanie zakonczone sukcesem */
- } /* Zwroc liczbe zapisywanych pikseli */
- /*Negatyw*/
- int negatyw(int obraz_pgm[][MAX],int *wymx, int *wymy, int *szarosci){
- int i,j;
- printf("%d %d %d",*wymx ,*wymy, *szarosci);
- for(i=0; i<*wymx; i++);{
- for(j=0; j<*wymy;j++){
- obraz_pgm[i][j]=(*szarosci)-obraz_pgm[i][j];
- printf("%d " ,obraz_pgm[i][j]);
- }
- }
- }
- int main() {
- int obraz[MAX][MAX] ;
- int wymx,wymy,odcieni;
- int i,j=0,g=0; /*Zmienna pomocnicza uzyta w petli*/
- int w; /*Zmienna przy wyborze funkcji w menu*/
- int odczytano = 0;
- FILE *plik;
- char nazwa[100];
- for(i=1;i>0;i++){
- puts("Menu:");
- puts("1.Wczytaj obraz");
- puts("2.Wyswietl obraz");
- puts("3.Zapisz obraz");
- puts("4.Negatyw");
- puts("5.Zakoncz dzialanie programu");
- printf("Twoj wybor:");
- scanf("%d",&w);
- switch(w){
- case 1:
- /* Wczytanie zawartosci wskazanego pliku do pamieci */
- printf("Podaj nazwe pliku:\n");
- scanf("%s",nazwa);
- plik=fopen(nazwa,"r");
- if (plik != NULL) { /* co spowoduje zakomentowanie tego warunku */
- odczytano= czytaj(plik,obraz,&wymx,&wymy,&odcieni);
- fclose(plik);
- }
- break;
- case 2:
- /* Wyswietlenie poprawnie wczytanego obraza zewnetrznym programem */
- if (odczytano != 0)
- wyswietl(nazwa);
- break;
- case 3:
- /* Stworzenie nowego pliku */
- printf("Podaj nazwe nowego pliku:\n");
- scanf("%s",nazwa);
- plik=fopen(nazwa,"w");
- if (plik != NULL) { /* co spowoduje zakomentowanie tego warunku */
- odczytano= zapisz(plik,obraz,&wymx,&wymy,&odcieni);
- }
- fclose(plik);
- break;
- case 4:
- negatyw(obraz,&wymx,&wymy,&odcieni);
- printf("Uzyto funkcji negatyw\n");
- break;
- case 5:
- return 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement