/* * FloatImg library from tTh - ugly code inside */ #include #include "../floatimg.h" /* -------------------------------------------------------------- */ /* global vars from main */ extern int verbosity; /* -------------------------------------------------------------- */ /* * parameter mix is between 0.0 and 1.0 but other * values give sometime good vibrations. */ int fimg_mix_rgb_gray(FloatImg *img, float mix) { int x, y, p; float gr; if (FIMG_TYPE_RGB != img->type) { fprintf(stderr, "%s bad type\n", __func__); return -6; } for (y=0; yheight; y++) { p = y * img->width; /* first pixel of the row */ for (x=0; xwidth; x++) { gr = (img->R[p] + img->G[p] + img->R[p]) / 3.0; img->R[p] = ((gr * mix) + (img->R[p] * (1.0-mix))) / 2.0; img->G[p] = ((gr * mix) + (img->G[p] * (1.0-mix))) / 2.0; img->B[p] = ((gr * mix) + (img->B[p] * (1.0-mix))) / 2.0; p++; /* next pixel in the row */ } } return 0; } /* -------------------------------------------------------------- */ /* * The third parameter was a six value array with min and max * values maybe computed by the 'fimg_get_minmax_rgb' function. */ int fimg_shift_to_zero(FloatImg *s, FloatImg *d, float coefs[6]) { int sz, idx; if (FIMG_TYPE_RGB != s->type) { fprintf(stderr, "%s bad type\n", __func__); return -6; } sz = s->width * s->height; for (idx=0; idxR[idx] = s->R[idx] - coefs[0]; d->G[idx] = s->G[idx] - coefs[2]; d->B[idx] = s->B[idx] - coefs[4]; } return 0; } /* -------------------------------------------------------------- */