FloatImg4PythonBinding/Fonderie/sfx.c

144 lines
3.4 KiB
C
Raw Normal View History

2020-11-02 01:25:00 +01:00
/*
* SPECIAL EFFECTS
*
* Du code bien cracra / tTh / Tetalab
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <floatimg.h>
#include "fonctions.h"
/* -------------------------------------------------------------- */
2020-11-05 12:48:35 +01:00
/* here are global vars exported by the main module
2020-11-02 01:25:00 +01:00
*/
2020-11-02 14:51:48 +01:00
extern int verbosity;
2020-11-02 01:25:00 +01:00
2020-11-20 22:25:30 +01:00
/* -------------------------------------------------------------- */
/* nouveau du 20 novembre 2020, pour encoder une vidz du vernissage
* du festival Sauvageonnes de Mixart-Myrys */
int des_bords_sombres_a(FloatImg *pimg, int offset)
{
float coef;
int xpos, lidx, y;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pimg, offset);
#endif
if (offset<0 || offset>pimg->width) {
fprintf(stderr, "%s offset %d is bad\n", __func__, offset);
return -66;
}
for (y=0; y<pimg->height; y++) {
lidx = y * pimg->width;
for (xpos=0; xpos<offset; xpos++) {
coef = (float)xpos / (float)offset;
pimg->R[xpos+lidx] *= coef;
pimg->G[xpos+lidx] *= coef;
pimg->B[xpos+lidx] *= coef;
pimg->R[(pimg->width-xpos)+lidx] *= coef;
pimg->G[(pimg->width-xpos)+lidx] *= coef;
pimg->B[(pimg->width-xpos)+lidx] *= coef;
}
}
return 0;
}
2020-11-10 00:50:25 +01:00
/* -------------------------------------------------------------- */
int trinarize(FloatImg *pimg, int notused)
{
fprintf(stderr, "the function '%s' is not implemented\n", __func__);
exit(2);
return -1;
}
2020-11-02 01:25:00 +01:00
/* -------------------------------------------------------------- */
2020-11-05 12:48:35 +01:00
int binarize(FloatImg *pimg, int notused)
{
float mm[6], mR, mG, mB;
2020-11-05 21:07:38 +01:00
int foo, size;
2020-11-05 12:48:35 +01:00
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pimg, notused);
#endif
foo = fimg_get_minmax_rgb(pimg, mm);
mR = (mm[1] - mm[0]) / 2.0;
mG = (mm[3] - mm[2]) / 2.0;
mB = (mm[5] - mm[4]) / 2.0;
if (verbosity > 1)
2020-11-05 21:07:38 +01:00
fprintf(stderr, "%s: %f %f %f\n", __func__, mR, mG, mB);
size = pimg->width * pimg->height;
for (foo=0; foo<size; foo++) {
if (pimg->R[foo] < mR) pimg->R[foo] = mm[0];
else pimg->R[foo] = mm[1];
if (pimg->G[foo] < mG) pimg->G[foo] = mm[2];
else pimg->G[foo] = mm[3];
if (pimg->B[foo] < mB) pimg->B[foo] = mm[4];
else pimg->B[foo] = mm[5];
2020-11-05 12:48:35 +01:00
}
2020-11-02 01:25:00 +01:00
2020-11-05 12:48:35 +01:00
return 0;
}
2020-11-02 14:51:48 +01:00
/* -------------------------------------------------------------- */
int brotche_rand48_a(FloatImg *fimg, float ratio, float mval)
2020-11-02 01:25:00 +01:00
{
int nbpix, todo, foo;
int x, y;
float fval;
nbpix = fimg->width * fimg->height;
todo = (int)((float)nbpix * ratio);
2020-11-02 14:51:48 +01:00
if (verbosity > 1) {
fprintf(stderr, "%s: ratio %f nbpix %d todo %d\n", __func__,
ratio, nbpix, todo);
}
2020-11-02 01:25:00 +01:00
for (foo=0; foo<todo; foo++)
{
fval = (float)drand48() * mval;
x = rand() % fimg->width;
y = rand() % fimg->height;
fimg_plot_rgb(fimg, x, y, fval, fval, fval);
}
return 0;
}
/* -------------------------------------------------------------- */
int brotche_rand48_b(FloatImg *fimg, float ratio, float mval)
{
int nbpix, todo, foo;
int x, y;
float fval;
nbpix = fimg->width * fimg->height;
todo = (int)((float)nbpix * ratio);
if (verbosity > 1) {
2020-11-02 14:51:48 +01:00
fprintf(stderr, "%s: ratio %f nbpix %d todo %d\n", __func__,
2020-11-02 01:25:00 +01:00
ratio, nbpix, todo);
}
for (foo=0; foo<todo; foo++)
{
fval = (float)drand48() * mval;
x = 1 + (rand() % (fimg->width-2));
y = rand() % fimg->height;
fimg_plot_rgb(fimg, x-1, y, fval, 0.0, 0.0);
fimg_plot_rgb(fimg, x , y, 0.0, 0.0, fval);
fimg_plot_rgb(fimg, x+1, y, 0.0, fval, 0.0);
}
return 0;
}
/* -------------------------------------------------------------- */