/* Last edited on 2017-06-30 01:13:39 by stolfilocal */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include void gravaImagem(float_image_t *img,char *name); float_image_t *leImagem(char *name); void extraiCanais(char *name); void gravaImagem(float_image_t *img,char *name) { FILE *wr = open_write(name,TRUE); int chns = img->sz[0]; uint16_image_t *pim = float_image_to_uint16_image(img, chns, NULL, NULL, NULL, 255, FALSE); bool_t forceplain = FALSE; bool_t verbose = FALSE; uint16_image_write_pnm_file(wr, pim, forceplain, verbose); uint16_image_free(pim); } float_image_t *leImagem(char *name) { char *n = jsprintf("%s.ppm",name); FILE *rd = open_read(n, TRUE); uint16_image_t *pim = uint16_image_read_pnm_file(rd); float_image_t *fim = float_image_from_uint16_image(pim, NULL, NULL, FALSE); uint16_image_free(pim); return fim; } void extraiCanais(char *name) { float_image_t *img=leImagem(name); float_image_t *R = float_image_new(img->sz[0],img->sz[1],img->sz[2]); float_image_t *G = float_image_new(img->sz[0],img->sz[1],img->sz[2]); float_image_t *B = float_image_new(img->sz[0],img->sz[1],img->sz[2]); int i=0,j=0,c=0; float rgb[3]; for (i=0;isz[1];i++) for (j=0;jsz[2];j++) { for (c=0;csz[0];c++) { rgb[0]=0; rgb[1]=0; rgb[2]=0; if (c==0) { rgb[c]=float_image_get_sample(img,c,i,j); float_image_set_pixel(R,i,j,rgb); } else if (c==1) { rgb[c]=float_image_get_sample(img,c,i,j); float_image_set_pixel(G,i,j,rgb); } else { rgb[c]=float_image_get_sample(img,c,i,j); float_image_set_pixel(B,i,j,rgb); } } } char *n = jsprintf("%s_r.ppm",name); gravaImagem(R,n); char *n = jsprintf("%s_g.ppm",name); gravaImagem(G,n); char *n = jsprintf("%s_b.ppm",name); gravaImagem(B,n); } int main(int argc, char** argv) { char *name = argv[1]; extraiCanais(name); return 1; }