working on glitching methods

This commit is contained in:
le vieux 2020-11-15 11:47:37 +01:00
parent 70d811a7e5
commit dcacb07738
5 changed files with 63 additions and 23 deletions

View File

@ -117,6 +117,9 @@ switch (idFx) {
retval = trinarize(image, 0); retval = trinarize(image, 0);
break; break;
/* --- WTF -- */ /* --- WTF -- */
case 25:
retval = vertical_singlitch(image, 250, fval, 18, 0);
break;
default : default :
fprintf(stderr, "%s : effect #%d invalid\n", fprintf(stderr, "%s : effect #%d invalid\n",
__func__, idFx); __func__, idFx);

View File

@ -10,6 +10,7 @@
#include <floatimg.h> #include <floatimg.h>
#include "fonctions.h" #include "fonctions.h"
#include "glitches.h"
#include "crapulator.h" #include "crapulator.h"
int verbosity; int verbosity;

View File

@ -113,10 +113,31 @@ int poke_a_random_pixel(FloatImg *picz, float fval, int kaboo)
return -1; return -1;
} }
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
int vertical_singlitch(FloatImg *picz, float omega, float phi) int vertical_singlitch(FloatImg *picz, int xpos, float fval,
float omega, float phi)
{ {
int y, x, w, h;
return -1; #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %d %f %f )\n", __func__, picz,
xpos, omega, phi);
#endif
h = picz->height; w = picz->width;
#define BB 12
for (y=BB; y<h-BB; y++) {
x = xpos; /* add sinus deviation here */
/* compute bounding box */
if ( (x>BB) && (x<w-BB) ) {
/* an make the glitch */
fimg_plot_rgb(picz, x, y, fval, fval, fval);
if (rand() & 8)
fimg_plot_rgb(picz, x-1, y, 0.0, 0.0, 0.0);
if (rand() & 8)
fimg_plot_rgb(picz, x+1, y, 0.0, 0.0, 0.0);
}
}
return 0;
} }
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */

View File

@ -9,6 +9,7 @@ int un_petit_flou_8x8(FloatImg *picture, int x, int y);
int un_moyen_flou_8x8(FloatImg *picture, int x, int y); int un_moyen_flou_8x8(FloatImg *picture, int x, int y);
int poke_a_random_pixel(FloatImg *picz, float fval, int kaboo); int poke_a_random_pixel(FloatImg *picz, float fval, int kaboo);
int vertical_singlitch(FloatImg *picz, float omega, float phi); int vertical_singlitch(FloatImg *picz, int xpos, float fv, float omega,
float phi);
/* this is a wtf file */ /* this is a wtf file */

View File

@ -39,7 +39,7 @@ static int cmp_idxvalues(const void *pa, const void *pb)
return ( ((IdxValue *)pa)->value > ((IdxValue *)pb)->value); return ( ((IdxValue *)pa)->value > ((IdxValue *)pb)->value);
} }
int tentative_triage(glob_t *ptr_glob, IdxValue **ptr_idxval) int tentative_triage(glob_t *ptr_glob, IdxValue **ptr_idxval, int method)
{ {
int idx, foo, nombre; int idx, foo, nombre;
float metrique; float metrique;
@ -47,7 +47,8 @@ char *filename;
IdxValue *idxvalues; IdxValue *idxvalues;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %p )\n", __func__, ptr_glob, ptr_idxval); fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, ptr_glob,
ptr_idxval, method);
#endif #endif
nombre = ptr_glob->gl_pathc; nombre = ptr_glob->gl_pathc;
@ -71,13 +72,16 @@ for (idx=0; idx<nombre; idx++) {
foo, filename); foo, filename);
return -1; return -1;
} }
fprintf(stderr, "%5d %s %f\n", idx, filename, metrique); if (verbosity)
fprintf(stderr, "%5d %s %f\n", idx, filename, metrique);
idxvalues[idx].idx = idx; idxvalues[idx].idx = idx;
idxvalues[idx].value = metrique; idxvalues[idx].value = metrique;
} }
/* and now, we can massage all our datas */ if (method) {
qsort(idxvalues, nombre, sizeof(IdxValue), cmp_idxvalues); /* and now, we can massage all our datas */
qsort(idxvalues, nombre, sizeof(IdxValue), cmp_idxvalues);
}
for (idx=0; idx<nombre; idx++) { for (idx=0; idx<nombre; idx++) {
printf("%5d %9.6f %5d\n", idx, printf("%5d %9.6f %5d\n", idx,
@ -92,7 +96,8 @@ return 0;
/* /*
* This is the mega working loop * This is the mega working loop
*/ */
int interpolator(char *pattern, char *outdir, int Nsteps, int infx) int interpolator(char *pattern, char *outdir, int Nsteps,
int infx, int outfx, int sort)
{ {
FloatImg A, B, Out, *pFirst, *pSecond; FloatImg A, B, Out, *pFirst, *pSecond;
glob_t globbuf; glob_t globbuf;
@ -117,7 +122,7 @@ if (0 == globbuf.gl_pathc) {
} }
idx_values = NULL; idx_values = NULL;
foo = tentative_triage(&globbuf, &idx_values); foo = tentative_triage(&globbuf, &idx_values, sort);
fprintf(stderr, "\tTRI of %p -> %d\n\n", idx_values, foo); fprintf(stderr, "\tTRI of %p -> %d\n\n", idx_values, foo);
foo = fimg_fileinfos(globbuf.gl_pathv[0], iarray); foo = fimg_fileinfos(globbuf.gl_pathv[0], iarray);
@ -151,10 +156,10 @@ for (idx=0; idx<globbuf.gl_pathc; idx++) {
value = idx_values[idx].value; value = idx_values[idx].value;
/* here, we can insert the input filter */ /* here, we can insert the input filter */
/* OK try it ... */ /* OK try it ... */
foo = crapulator(&B, infx, value/2.0); foo = crapulator(&B, infx, value/2.0);
if (foo) { if (foo) {
fprintf(stderr, "crapulator failure %d\n", foo); fprintf(stderr, "in fx crapulator failure %d\n", foo);
exit(1); exit(1);
} }
@ -163,9 +168,11 @@ for (idx=0; idx<globbuf.gl_pathc; idx++) {
fimg_interpolate(pSecond, pFirst, &Out, coef); fimg_interpolate(pSecond, pFirst, &Out, coef);
/* here we can insert the output filter */ /* here we can insert the output filter */
if (rand() & 0x55) { foo = crapulator(&Out, outfx, value);
kill_a_few_lines(&Out, value/2.0, 5+(rand()%20)); if (foo) {
kill_a_few_lines(&Out, 0.0, 5+(rand()%20)); fprintf(stderr, "\nout fx %d crapulator failure %d\n",
outfx, foo);
exit(1);
} }
sprintf(line, "%s/%05d.png", outdir, ipng); sprintf(line, "%s/%05d.png", outdir, ipng);
@ -210,29 +217,36 @@ int main (int argc, char *argv[])
int foo; int foo;
int nbrsteps = 9; int nbrsteps = 9;
int opt; int opt;
int inFx = 0;
int outFx = 0;
int sort = 0;
fprintf(stderr, "*** %s : compiled by tTh, %s %s\n", __FILE__, fprintf(stderr, "*** %s : compiled by tTh, %s %s\n", __FILE__,
__DATE__, __TIME__); __DATE__, __TIME__);
fimg_print_version(2); fimg_print_version(2);
while ((opt = getopt(argc, argv, "hv")) != -1) { while ((opt = getopt(argc, argv, "hS:vw:x:")) != -1) {
switch(opt) { switch(opt) {
case 'h': help(); break; case 'h': help(); break;
case 'S': sort = atoi(optarg); break;
case 'v': verbosity++; break; case 'v': verbosity++; break;
case 'w': inFx = atoi(optarg); break;
case 'x': outFx = atoi(optarg); break;
} }
} }
/* TO BE CONTINUED *****/ #if DEBUG_LEVEL
fprintf(stderr, "%s : argc = %d, optind = %d\n", argv[0], argc, optind);
#endif
if (4 != argc) { if (3 != (argc-optind)) {
fprintf(stderr, "args: <in globpattern> <out dir> <nbrsteep>\n"); fprintf(stderr, "args: [options] <inglob> <outdir> <nbsteep>\n");
exit(1); exit(1);
} }
nbrsteps = atoi(argv[3]); nbrsteps = atoi(argv[optind+2]);
foo = interpolator(argv[optind], argv[optind+1], nbrsteps,
#define EFFECT 7 inFx, outFx, sort);
foo = interpolator(argv[1], argv[2], nbrsteps, EFFECT);
fprintf(stderr, "interpolator give a %d score\n", foo); fprintf(stderr, "interpolator give a %d score\n", foo);