Bibliothèque de traitements d'images en virgule flottante.
http://la.buvette.org/photos/cumul/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.5 KiB
111 lines
2.5 KiB
/* |
|
* 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" |
|
|
|
/* -------------------------------------------------------------- */ |
|
/* here are global vars exported by the main module |
|
*/ |
|
extern int verbosity; |
|
|
|
/* -------------------------------------------------------------- */ |
|
int trinarize(FloatImg *pimg, int notused) |
|
{ |
|
|
|
fprintf(stderr, "the function '%s' is not implemented\n", __func__); |
|
exit(2); |
|
|
|
return -1; |
|
} |
|
/* -------------------------------------------------------------- */ |
|
int binarize(FloatImg *pimg, int notused) |
|
{ |
|
float mm[6], mR, mG, mB; |
|
int foo, size; |
|
|
|
#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) |
|
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]; |
|
} |
|
|
|
return 0; |
|
} |
|
/* -------------------------------------------------------------- */ |
|
int brotche_rand48_a(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) { |
|
fprintf(stderr, "%s: ratio %f nbpix %d todo %d\n", __func__, |
|
ratio, nbpix, todo); |
|
} |
|
|
|
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) { |
|
fprintf(stderr, "%s: ratio %f nbpix %d todo %d\n", __func__, |
|
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; |
|
} |
|
/* -------------------------------------------------------------- */ |
|
|
|
|