#include #define SCREENWIDTH 512 FILE *image_in; char image[50]; int sizex, sizey, larg_min; /* ------------------------ filtro mediana ----------------------- */ /* ordena um vetor v de tamanho tamf */ void ordena_vetor(v,tamf) int *v; int tamf; { int i, j, a; for(i = 0; i=sizex) continue; f[j] = line_image[ix+j-meio]; } for(j = 0; j < tamf; j++) o[j] = f[j]; ordena_vetor(o,tamf); aux_line[ix] = o[meio]; /* line_image[ix] = o[meio];*/ } for(ix = 0; ix < sizex; ix++) line_image[ix] = aux_line[ix]; } /* abre_arq() - Abre arquivos das imagens e le cabecalho de 4 linhas */ void abre_arq(void) { char carac; char s[512]; image_in = fopen(image, "r"); /* leitura e verificacao de cabecalho p/imagem de entrada */ fgets(s, 510, image_in); if(strcmp(s, "P5\n") != 0) { fprintf(stderr," Imagem com formato diferente de PGM \n"); exit(1); } carac = getc(image_in); while(carac == '#') { fgets(s, 510,image_in); carac = getc(image_in); } ungetc(carac, image_in); fscanf(image_in,"%d %d\n",&sizex,&sizey); fprintf(stdout,"imagem: sizex = %d sizey = %d\n\n",sizex,sizey); fgets(s, 510, image_in); /* leitura da ultima linha = niveis de cinza */ } main() { int xi, xf, yi, yf; int ix, iy, i; unsigned char line[SCREENWIDTH]; /* buffers para leitura de */ /* linhas da imagem*/ printf("\n\n Programa para impressao de linhas da imagem.\n"); printf("Imagem de entrada = "); scanf("%s",image); printf("\nYi = "); scanf("%d",&yi); printf("\nYf = "); scanf("%d",&yf); printf("\nXi = "); scanf("%d",&xi); printf("\nXf = "); scanf("%d",&xf); printf("\nlarg_min para carreira = "); scanf("%d",&larg_min); printf("\n\n"); abre_arq(); for(i=0; i