diff --git a/funcs/Makefile b/funcs/Makefile index 9dbf5df8..971c09e3 100644 --- a/funcs/Makefile +++ b/funcs/Makefile @@ -5,7 +5,7 @@ DEPS = ../floatimg.h Makefile OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \ fimg-libpnm.o rampes.o sfx0.o geometry.o rotate.o \ equalize.o fimg-fits.o saturation.o histogram.o \ - hsv.o classif.o contour2x2.o + hsv.o classif.o contour2x2.o qsortrgb.o #--------------------------------------------------------------- @@ -64,6 +64,10 @@ rampes.o: rampes.c $(DEPS) classif.o: classif.c $(DEPS) gcc $(COPT) -c $< +qsortrgb.o: qsortrgb.c $(DEPS) + gcc $(COPT) -c $< + + hsv.o: hsv.c $(DEPS) gcc $(COPT) -c $< diff --git a/funcs/qsortrgb.c b/funcs/qsortrgb.c new file mode 100644 index 00000000..05456b24 --- /dev/null +++ b/funcs/qsortrgb.c @@ -0,0 +1,41 @@ +/* + * qsort_rgb.c + */ + +#include +#include +#include +#include + +#include "../floatimg.h" + +int verbosity; + +/* --------------------------------------------------------------------- */ +/* nouveau 7 octobre 2020, juste avant sonoptic de la pluie craignos */ + +static int compare(const void *p1, const void *p2) +{ +return ( *(float *)p1 < *(float *)p2 ); +} + +int fimg_qsort_rgb(FloatImg *psrc, FloatImg *pdst, int notused) +{ +int foo, szimg; + +#if DEBUG_LEVEL +fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, psrc, pdst, notused); + #endif + +foo = fimg_copy_data(psrc, pdst); + +szimg = pdst->width * pdst->height; +fprintf(stderr, "%s : %d pixels\n", __func__, szimg); + +qsort(pdst->R, szimg, sizeof(float), compare); +qsort(pdst->G, szimg, sizeof(float), compare); +qsort(pdst->B, szimg, sizeof(float), compare); + +return 0; +} +/* --------------------------------------------------------------------- */ diff --git a/funcs/t.c b/funcs/t.c index 08330fb2..17befa52 100644 --- a/funcs/t.c +++ b/funcs/t.c @@ -14,6 +14,48 @@ int verbosity; float global_fvalue; +/* --------------------------------------------------------------------- */ +/* + * nouveau 7 octobre 2020 pendant sonoptic + */ + +int fimg_qsort_rgb(FloatImg *psrc, FloatImg *pdst, int notused); + +int essai_qsort_rgb(char *infile) +{ +FloatImg src, dst; +int foo; + +if (NULL != infile) { + fprintf(stderr, "%s : loading %s\n", __func__, infile); + foo = fimg_create_from_dump(infile, &src); + if (foo) { + fprintf(stderr, "%s: error loading '%s'\n", __func__, infile); + return foo; + } + } +else { + fprintf(stderr, "%s : NOT INPUT FILE, FUBAR\n", __func__); + abort(); + } + +fimg_clone(&src, &dst, 1); + +foo = fimg_qsort_rgb(&src, &dst, 0); +if (foo) { + fprintf(stderr, "%s: err %d in qsort_rgb\n", __func__, foo); + return foo; + } + +foo = fimg_save_as_pnm(&dst, "out.pnm", 0); +if (foo) { + fprintf(stderr, "%s : err %d saving result\n", __func__, foo); + return foo; + } + +return 0; +} + /* --------------------------------------------------------------------- */ /* * nouveau 5 octobre 2020 pendant sonoptic @@ -511,7 +553,7 @@ return 0; } /* --------------------------------------------------------------------- */ enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff, - Histo, Hsv, Classif, Ctr2x2 }; + Histo, Hsv, Classif, Ctr2x2, Qsortrgb }; typedef struct { char *name; int Cmd; @@ -530,6 +572,7 @@ Command commands[] = { { "hsv", Hsv }, { "classif", Classif }, { "ctr2x2", Ctr2x2 }, + { "qsortrgb", Qsortrgb }, { NULL, 0 } } ; @@ -634,6 +677,9 @@ switch(opt) { case Ctr2x2: foo = essai_contour_2x2(filename); break; + case Qsortrgb: + foo = essai_qsort_rgb(filename); + break; default: fprintf(stderr, "%s : bad command\n", command); exit(1);