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.
94 lines
1.9 KiB
94 lines
1.9 KiB
/* |
|
* FLOATIMG - a kluge from tTh |
|
*/ |
|
|
|
|
|
#include <stdio.h> |
|
#include <string.h> |
|
|
|
#include "../floatimg.h" |
|
|
|
extern int verbosity; |
|
|
|
/* |
|
* a place for moving here Fonderie effects |
|
*/ |
|
/* -------------------------------------------------------------- */ |
|
int fimg_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 fimg_trinarize(FloatImg *pimg, int notused) |
|
{ |
|
float mm[6], mRa, mGa, mBa, mRb, mGb, mBb; |
|
float *fptr; |
|
int foo, size; |
|
|
|
#if DEBUG_LEVEL |
|
fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pimg, notused); |
|
#endif |
|
|
|
foo = fimg_get_minmax_rgb(pimg, mm); |
|
mRa = (mm[1] - mm[0]) * 0.33333; |
|
mGa = (mm[3] - mm[2]) * 0.33333; |
|
mBa = (mm[5] - mm[4]) * 0.33333; |
|
mRb = (mm[1] - mm[0]) * 0.66666; |
|
mGb = (mm[3] - mm[2]) * 0.66666; |
|
mBb = (mm[5] - mm[4]) * 0.66666; |
|
|
|
size = pimg->width * pimg->height; |
|
|
|
for (foo=0; foo<size; foo++) { |
|
|
|
fptr = pimg->R; |
|
if (fptr[foo] < mRa || fptr[foo] > mRb) |
|
fptr[foo] = mm[0]; |
|
else |
|
fptr[foo] = mm[1]; |
|
|
|
fptr = pimg->G; |
|
if (fptr[foo] < mGa || fptr[foo] > mGb) |
|
fptr[foo] = mm[2]; |
|
else |
|
fptr[foo] = mm[3]; |
|
|
|
fptr = pimg->B; |
|
if (fptr[foo] < mBa || fptr[foo] > mBb) |
|
fptr[foo] = mm[4]; |
|
else |
|
fptr[foo] = mm[5]; |
|
|
|
} |
|
|
|
return 0; |
|
} |
|
/* -------------------------------------------------------------- */ |
|
|
|
|