Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<math.h>
- #define MAX 512
- #define DL_LINII 80
- FILE p;
- int obraz_pgm [MAX] [MAX] ;
- int L [MAX] [MAX];
- int wymx,wymy,szarosci,prog;
- char n_pliku[24];
- int czytaj(FILE *p,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
- char s[DL_LINII];
- int znak,koniec=0,i,j;
- /*sprawdzenie czy podano prawidooowy uchwyt pliku */
- if (p==NULL) {
- fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
- return(0);
- }
- if (fgets(s,DL_LINII,p)==NULL) koniec=1;
- /* Sprawdzenie "numeru magicznego - powinien by P2 */
- if ( (s[0]!='P') || (s[1]!='2') || koniec) {
- fprintf(stderr,"Blad: To nie jest plik PGM\n");
- return(0);
- }
- /* Pominiecie komentarzy */
- do {
- if ((znak=fgetc(p))=='#') {
- if (fgets(s,DL_LINII,p)==NULL) koniec=1;
- } else {
- ungetc(znak,p);
- }
- } while (! koniec && znak=='#');
- /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
- if (fscanf(p,"%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 (j=0;j<*wymy;j++) {
- for (i=0;i<*wymx;i++) {
- if (fscanf(p,"%d",&(obraz_pgm[i][j]))!=1) {
- fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
- return(0);
- }
- }
- }
- return *wymx**wymy;
- }
- void wyswietl(char *n_pliku) {
- /* Wyswietlenie obrazu o zadanej nazwie za pomoca programu "display" */
- char polecenie[1024];
- strcpy(polecenie,"display ");
- strcat(polecenie,n_pliku);
- strcat(polecenie," &");
- printf("%s\n",polecenie);
- system(polecenie);
- }
- void negatyw(){
- int i,j;
- for (j=0;j<wymy;j++)
- for (i=0;i<wymx;i++) L[i][j]=szarosci-L[i][j];
- }
- void progowanie(int L[][MAX],int prog, int wymx, int wymy, int szarosci){
- int i,j;
- for (j=0;j<wymy;j++)
- for (i=0;i<wymx;i++) {
- if (L[i][j]<=prog) L[i][j]=0;
- else L[i][j]=szarosci;
- }
- }
- void konturowanie(int L[][MAX],int wymx, int wymy, int szarosci){
- int i,j;
- for (j=0;j<wymy;j++)
- for (i=0;i<wymx;i++) L[i][j]=abs(L[i+1][j]-L[i][j])+abs(L[i][j+1]-L[i][j]);
- }
- int zapisz(FILE *p){
- int j,i;
- /*sprawdzenie czy podano prawidooowy uchwyt pliku */
- if (p==NULL) {
- fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
- return(0);
- }
- fprintf(p,"P2\n");
- fprintf(p,"#negatyw\n");
- fprintf(p,"%d %d %d\n",wymx,wymy,szarosci);
- for (j=0;j<wymy;j++){
- for (i=0;i<wymx;i++) {
- fprintf(p,"%d ",obraz_pgm[i][j]);
- }
- }
- return wymx*wymy;
- }
- int main()
- {
- int wybor;
- FILE *plik;
- printf("Podaj nazwe pliku:\n");
- char nazwa[100];
- scanf("%s",nazwa);
- plik=fopen(nazwa,"r");
- czytaj(plik, obraz_pgm, &wymx, &wymy, &szarosci);
- printf("Menu\n");
- printf("1.Wyswietl obraz\n");
- printf("2.Negatyw\n");
- printf("3.Progowanie\n");
- printf("4.Konturowanie\n");
- printf("5.Zapisz plik\n");
- printf("6.Wyjdz z programu\n");
- while(wybor!=6){
- switch (wybor)
- {
- case 1:
- wyswietl(n_pliku);
- break;
- case 2:
- negatyw();
- break;
- case 3:
- progowanie(L, prog, wymx, wymy, szarosci);
- break;
- case 4:
- konturowanie(L, wymx, wymy, szarosci);
- break;
- case 5: {
- FILE *plik2;
- plik2=fopen("nowy.pgm","w");
- zapisz(plik2);
- break;}
- case 6:
- return 0;
- break ;
- }
- scanf("%d",&wybor);
- }
- }
Add Comment
Please, Sign In to add comment