/* * crapulator.c */ #include #include #include #include "fonctions.h" #include "crapulator.h" #include "glitches.h" #include "sfx.h" /* -------------------------------------------------------------- */ static int effect_3(FloatImg *image) { float value; int foo; value = fimg_get_maxvalue(image); fimg_mul_cste(image, -1.0); fimg_add_cste(image, value); foo = fimg_count_negativ(image); if (foo) { fimg_dump_to_file(image, "err.fimg", 0); fprintf(stderr, "%s negativ %d\n", __func__, foo); return -78; } return 0; } /* -------------------------------------------------------------- */ static int insitu_ctr2x2(FloatImg *pimg) { FloatImg img; int retval; fimg_clone(pimg, &img, 0); retval = fimg_contour_2x2(pimg, &img, 0); if (retval) { fprintf(stderr, "%s : err contour %d\n", __func__, retval); exit(1); } fimg_copy_data(&img, pimg); fimg_destroy(&img); return 0; } /* -------------------------------------------------------------- */ static int insitu_filtre3x3(FloatImg *pimg) { FloatImg img; int retval; FimgFilter3x3 filtre = { { 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0, }, 16.0, 0.0 }; fimg_clone(pimg, &img, 0); retval = fimg_filter_3x3(pimg, &img, &filtre); if (retval) { fprintf(stderr, "%s error %d on filter\n", __func__, retval); exit(1); } fimg_copy_data(&img, pimg); fimg_destroy(&img); return retval; } /* -------------------------------------------------------------- */ /* * This is the main filter engine * used both for input and output */ #define DEBUG_THIS_CRAP 0 int crapulator(FloatImg *image, int idFx, float fval) { int retval; // FloatImg imgtmp; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( %p %d %f )\n", __func__, image, idFx, fval); #endif retval = 0; #if DEBUG_THIS_CRAP static int count = 0; int flag_debug = 0; if (666==count) { flag_debug = 1; fprintf(stderr, "DEBUG PT 1 in %s:%d\n", __func__, __LINE__); fimg_save_as_png(image, "crap_before.png", 0); } #endif switch (idFx) { case 0: /* DO NOTHING */ retval = 0; break; case 1: fimg_cos_01(image, image, fimg_get_maxvalue(image)); break; case 2: fimg_cos_010(image, image, fimg_get_maxvalue(image)); break; case 3: retval = effect_3(image); break; case 4: brotche_rand48_a(image, 0.20, fimg_get_maxvalue(image)); break; case 5: brotche_rand48_b(image, 0.10, fimg_get_maxvalue(image)*0.8); break; case 6: fimg_killcolors_a(image, 0.0); break; case 7: retval = fimg_colors_mixer_a(image, 2.0); break; case 8: retval = insitu_ctr2x2(image); break; case 9: retval = fimg_classif_trial(image, image, 0.37, 0); break; case 10: retval = binarize(image, 0); break; case 11: retval = trinarize(image, 0); break; case 12: retval = fimg_lissage_2x2(image); break; case 13: retval = insitu_filtre3x3(image); break; case 24: /* experiment ! */ retval = des_bords_sombres_a(image, 160); break; case 25: /* please make this function more tweakable */ retval = vertical_singlitch(image, 290+rand()%45, fval, 0.19, 0); break; default : fprintf(stderr, "%s : effect #%d invalid\n", __func__, idFx); return -77; } #if DEBUG_THIS_CRAP if (flag_debug) { fprintf(stderr, "DEBUG PT 2 in %s:%d\n", __func__, __LINE__); fimg_save_as_png(image, "crap_after.png", 0); flag_debug = 0; } count++; #endif return retval; } /* -------------------------------------------------------------- */ char * crap_name_from_number(int num) { return "???"; } /* -------------------------------------------------------------- */ int crap_number_from_name(char *name) { return -1; } /* -------------------------------------------------------------- */