forked from tTh/FloatImg
60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
/*
|
|
* FLOATIMG - a kluge from tTh
|
|
* ---------------------------
|
|
*
|
|
* some strange effects on floating pictures, made in
|
|
* the batcave of "Le Bib", in Montpellier.
|
|
*/
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdint.h>
|
|
#include <sys/time.h>
|
|
|
|
#include "../floatimg.h"
|
|
|
|
extern int verbosity;
|
|
|
|
/* -------------------------------------------------------------- */
|
|
int fimg_crump_hard(FloatImg *src, FloatImg *dst, float kval, int notused)
|
|
{
|
|
float halfval;
|
|
float rgb[3];
|
|
int x, y, foo;
|
|
|
|
#if DEBUG_LEVEL
|
|
fprintf(stderr, ">>> %s ( %p %p %f 0x%04x )\n", __func__,
|
|
src, dst, kval, notused);
|
|
#endif
|
|
|
|
if (notused) {
|
|
fprintf(stderr, "notused was %d, must be 0 in %s\n",
|
|
notused, __func__);
|
|
}
|
|
|
|
halfval = fimg_get_maxvalue(src) / 2.0;
|
|
if (verbosity > 1) {
|
|
fprintf(stderr, "%s: kval=%f & halfval=%f\n", __func__,
|
|
kval, halfval);
|
|
}
|
|
|
|
for (y=0; y<src->height; y++) {
|
|
for (x=0; x<src->width; x++) {
|
|
foo = fimg_get_rgb(src, x, y, rgb);
|
|
if (foo) return foo;
|
|
|
|
if (rgb[0] > halfval) rgb[0] /= 2.0;
|
|
if (rgb[1] > halfval) rgb[1] /= 2.0;
|
|
if (rgb[2] > halfval) rgb[2] /= 2.0;
|
|
|
|
foo = fimg_put_rgb(dst, x, y, rgb);
|
|
if (foo) return foo;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
/* -------------------------------------------------------------- */
|
|
|