diff --git a/.gitignore b/.gitignore index 5fba36f..282e61a 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,7 @@ v4l2/nc-camcontrol tools/fimg2png tools/fimg2pnm tools/fimg2tiff +tools/fimg2text tools/fimgstats tools/mkfimg tools/png2fimg diff --git a/tools/Makefile b/tools/Makefile index a02efbb..6ed5ef9 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -8,8 +8,8 @@ DEPS = ../floatimg.h ../libfloatimg.a Makefile # ---------- -all: fimg2pnm mkfimg png2fimg fimgstats fimg2png \ - fimg2tiff \ +all: fimg2pnm mkfimg png2fimg fimgstats fimg2png \ + fimg2tiff fimg2text \ addpnm2fimg cumulfimgs fimgops fimgfx fimgstats: fimgstats.c $(DEPS) @@ -33,6 +33,9 @@ fimg2pnm: fimg2pnm.c $(DEPS) fimg2png: fimg2png.c $(DEPS) gcc $(COPT) $< ../libfloatimg.a -lpnglite -lz -o $@ +fimg2text: fimg2text.c $(DEPS) + gcc $(COPT) $< ../libfloatimg.a -o $@ + fimg2tiff: fimg2tiff.c $(DEPS) gcc $(COPT) $< ../libfloatimg.a -ltiff -o $@ diff --git a/tools/fimg2text.c b/tools/fimg2text.c new file mode 100644 index 0000000..7108d8f --- /dev/null +++ b/tools/fimg2text.c @@ -0,0 +1,123 @@ +/* + * converting a floatimg to a machinable text file + */ + +#include +#include +#include +#include + +#include "../floatimg.h" + +int verbosity; + +/* ------------------------------------------------------------------------- */ +int export_as_machinable(FloatImg *src, char *fname, int flags) +{ +FILE *fp; +int x, y, idx; + +#if DEBUG_LEVEL +fprintf(stderr, ">>> %25s ( %p '%s' %d )\n", __func__, + src, fname, flags); +#endif + +fp = NULL; /* molly guard */ +if (strcmp("-", fname)) { /* real file */ + fprintf(stderr, "real file\n"); + } + else { + fprintf(stderr, "kitchen sink\n"); + } + +idx = 0; +fp = stdout; /* XXX */ +for (y=0; yheight; y++) { + for (x=0; xwidth; x++) { + + fprintf(fp, "%d %d %d ", x, y, idx); + fprintf(fp, " %f %f %f\n", src->R[idx], src->G[idx], src->B[idx]); + idx++; + + } + } + +return 0; +} +/* ------------------------------------------------------------------------- */ +int convertir_fimg_en_machinable(char *srcname, char *dstname, int grisaille) +{ +int foo, infos[3]; +FloatImg fimg; + +#if DEBUG_LEVEL +fprintf(stderr, ">>> %25s ( '%s' '%s' %d )\n", __func__, + srcname, dstname, notused); +#endif + +foo = fimg_fileinfos(srcname, infos); +if (foo) { + fprintf(stderr, "'%s' get dims -> %d\n", srcname, foo); + return foo; + } + +if (verbosity) { + fprintf(stderr, "%s: image '%s' is %d x %d %s\n", + __func__, + srcname, infos[0], infos[1], + fimg_str_type(infos[2])); + } + +foo = fimg_create_from_dump(srcname, &fimg); +if (foo) { + fprintf(stderr, "create fimg from '%s' -> %d\n", srcname, foo); + return -1; + } + +if (verbosity) { + fimg_describe(&fimg, srcname); + } + +foo = export_as_machinable(&fimg, dstname, 0); + +fimg_destroy(&fimg); + +return 0; +} +/* ------------------------------------------------------------------------- */ +void help(int k) +{ + +puts("usage:\n\tfimg2text [options] foo.fimg > bar.csv"); +puts("options:"); +puts("\t-v\tincrease verbosity"); +if (verbosity) fimg_print_version(1); + +exit(0); +} +/* ------------------------------------------------------------------------- */ + +int main(int argc, char *argv[]) +{ +int foo, opt; + +while ((opt = getopt(argc, argv, "ghv")) != -1) { + switch(opt) { + case 'v': verbosity++; break; + case 'h': help(1); exit(1); + } + } + +if (1 != argc-optind) { + fprintf(stderr, "error: %s need two filenames\n", argv[0]); + exit(1); + } + +foo = convertir_fimg_en_machinable(argv[optind], "-", 0); +if (foo) + fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo); + +return 0; +} +/* ------------------------------------------------------------------------- */ +