Compare commits

..

2 Commits

Author SHA1 Message Date
tth
9517c8a10f integration de fimg_colors_mixer_a dans fimgfx 2020-06-23 11:09:42 +02:00
tth
59cbb3c1e0 de-kluging some funcs 2020-06-23 10:08:59 +02:00
3 changed files with 32 additions and 16 deletions

View File

@ -63,12 +63,13 @@ if (FIMG_TYPE_RGB != a->type || FIMG_TYPE_RGB != b->type) {
nbpixels = a->width * a->height; nbpixels = a->width * a->height;
/* are we cache-friendly here ?
* we need an accurate benchmarking... */
for (idx=0; idx<nbpixels; idx++) { for (idx=0; idx<nbpixels; idx++) {
b->R[idx] += a->R[idx]; b->R[idx] += a->R[idx];
b->G[idx] += a->G[idx]; b->G[idx] += a->G[idx];
b->B[idx] += a->B[idx]; b->B[idx] += a->B[idx];
/* are we cache-friendly here ?
* we need an accurate benchmarking... */
} }
return 0; return 0;
@ -85,8 +86,8 @@ int idx, nbpixels;
fprintf(stderr, ">>> %s ( %p %p %p )\n", __func__, a, b, d); fprintf(stderr, ">>> %s ( %p %p %p )\n", __func__, a, b, d);
#endif #endif
if (FIMG_TYPE_RGB != a->type || if ( FIMG_TYPE_RGB != a->type ||
FIMG_TYPE_RGB != b->type || FIMG_TYPE_RGB != b->type ||
FIMG_TYPE_RGB != d->type) { FIMG_TYPE_RGB != d->type) {
fprintf(stderr, "%s : got a bad type fimg\n", __func__); fprintf(stderr, "%s : got a bad type fimg\n", __func__);
return -8; return -8;
@ -175,13 +176,15 @@ if (FIMG_TYPE_RGB != a->type || FIMG_TYPE_RGB != b->type ||
return -8; return -8;
} }
nbiter = a->width * a->height * 3; nbiter = a->width * a->height;
for (idx=0; idx<nbiter; idx++) { for (idx=0; idx<nbiter; idx++) {
if (a->R[idx] > b->R[idx]) if (a->R[idx] > b->R[idx]) d->R[idx] = a->R[idx];
d->R[idx] = a->R[idx]; else d->R[idx] = b->R[idx];
else if (a->G[idx] > b->G[idx]) d->G[idx] = a->G[idx];
d->R[idx] = b->R[idx]; else d->G[idx] = b->G[idx];
if (a->B[idx] > b->B[idx]) d->B[idx] = a->B[idx];
else d->B[idx] = b->B[idx];
} }
return 0; return 0;
@ -201,13 +204,15 @@ if (FIMG_TYPE_RGB != a->type || FIMG_TYPE_RGB != b->type ||
return -8; return -8;
} }
nbiter = a->width * a->height * 3; nbiter = a->width * a->height ;
for (idx=0; idx<nbiter; idx++) { for (idx=0; idx<nbiter; idx++) {
if (a->R[idx] < b->R[idx]) if (a->R[idx] < b->R[idx]) d->R[idx] = a->R[idx];
d->R[idx] = a->R[idx]; else d->R[idx] = b->R[idx];
else if (a->G[idx] < b->G[idx]) d->G[idx] = a->G[idx];
d->R[idx] = b->R[idx]; else d->G[idx] = b->G[idx];
if (a->B[idx] < b->B[idx]) d->B[idx] = a->B[idx];
else d->B[idx] = b->B[idx];
} }
return 0; return 0;

View File

@ -23,7 +23,13 @@ function essai_drand48
./fimgstats -vv $TMPF ./fimgstats -vv $TMPF
} }
# ----------------------------------------------------- # -----------------------------------------------------
function essai_cmixa
{
./mkfimg -v -t tpat0 $TMPF 800 600
./fimgfx -v cmixa $TMPF bar.fimg
}
# -----------------------------------------------------
essai_drand48 essai_cmixa
# ----------------------------------------------------- # -----------------------------------------------------

View File

@ -21,7 +21,7 @@ typedef struct {
} Fx; } Fx;
enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0, enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0,
Fx_rot90, Fx_rot90, Fx_cmixa,
Fx_xper }; Fx_xper };
Fx fx_list[] = { Fx fx_list[] = {
@ -32,6 +32,7 @@ Fx fx_list[] = {
{ "gray0", Fx_gray0, 0, 1 }, { "gray0", Fx_gray0, 0, 1 },
{ "halfsz0", Fx_halfsz0, 0, 1 }, { "halfsz0", Fx_halfsz0, 0, 1 },
{ "rot90", Fx_rot90, 0, 0 }, { "rot90", Fx_rot90, 0, 0 },
{ "cmixa", Fx_cmixa, 0, 1 },
{ "xper", Fx_xper, 0, 1 }, { "xper", Fx_xper, 0, 1 },
{ NULL, 0, 0 } { NULL, 0, 0 }
}; };
@ -157,6 +158,10 @@ switch (action) {
case Fx_rot90: case Fx_rot90:
foo = fimg_rotate_90(&src, &dest, 0); break; foo = fimg_rotate_90(&src, &dest, 0); break;
case Fx_cmixa:
fimg_copy_data(&src, &dest);
foo = fimg_colors_mixer_a(&dest, 2.0); break;
case Fx_halfsz0: case Fx_halfsz0:
fprintf(stderr, "halfsize was not implemented\n"); fprintf(stderr, "halfsize was not implemented\n");
return -3; return -3;