forked from tTh/FloatImg
added "qsortrgb" effect
This commit is contained in:
parent
bbee507851
commit
ceb806d19c
|
@ -5,7 +5,7 @@ DEPS = ../floatimg.h Makefile
|
||||||
OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
|
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 \
|
fimg-libpnm.o rampes.o sfx0.o geometry.o rotate.o \
|
||||||
equalize.o fimg-fits.o saturation.o histogram.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)
|
classif.o: classif.c $(DEPS)
|
||||||
gcc $(COPT) -c $<
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
qsortrgb.o: qsortrgb.c $(DEPS)
|
||||||
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
|
||||||
hsv.o: hsv.c $(DEPS)
|
hsv.o: hsv.c $(DEPS)
|
||||||
gcc $(COPT) -c $<
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* qsort_rgb.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
48
funcs/t.c
48
funcs/t.c
|
@ -14,6 +14,48 @@ int verbosity;
|
||||||
|
|
||||||
float global_fvalue;
|
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
|
* nouveau 5 octobre 2020 pendant sonoptic
|
||||||
|
@ -511,7 +553,7 @@ return 0;
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
enum nCmd { Equalize=1, Rotate, Sfx0, F3x3, MIRE, Wfits, Wpng, Wtiff,
|
||||||
Histo, Hsv, Classif, Ctr2x2 };
|
Histo, Hsv, Classif, Ctr2x2, Qsortrgb };
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name;
|
char *name;
|
||||||
int Cmd;
|
int Cmd;
|
||||||
|
@ -530,6 +572,7 @@ Command commands[] = {
|
||||||
{ "hsv", Hsv },
|
{ "hsv", Hsv },
|
||||||
{ "classif", Classif },
|
{ "classif", Classif },
|
||||||
{ "ctr2x2", Ctr2x2 },
|
{ "ctr2x2", Ctr2x2 },
|
||||||
|
{ "qsortrgb", Qsortrgb },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
@ -634,6 +677,9 @@ switch(opt) {
|
||||||
case Ctr2x2:
|
case Ctr2x2:
|
||||||
foo = essai_contour_2x2(filename);
|
foo = essai_contour_2x2(filename);
|
||||||
break;
|
break;
|
||||||
|
case Qsortrgb:
|
||||||
|
foo = essai_qsort_rgb(filename);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s : bad command\n", command);
|
fprintf(stderr, "%s : bad command\n", command);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
Loading…
Reference in New Issue