FloatImg/funcs/sfx0.c

92 lines
1.9 KiB
C
Raw Normal View History

2020-02-07 18:01:28 +01:00
/*
* FLOATIMG
2020-02-13 20:44:22 +01:00
* effets spéciaux àlc sur les couleurs
2020-02-07 18:01:28 +01:00
*/
#include <stdio.h>
#include <string.h>
2021-05-17 22:38:56 +02:00
#include <stdint.h>
#include <sys/time.h>
2020-02-07 18:01:28 +01:00
#include "../floatimg.h"
/* --------------------------------------------------------------------- */
/*
* OMG ! a Color Graphic Adaptor emulator :)
*/
int fimg_killcolors_a(FloatImg *fimg, float fval)
{
int nbpix, foo;
if (FIMG_TYPE_RGB != fimg->type) {
fprintf(stderr, "%s: bad src type %d on %p\n", __func__,
fimg->type, fimg);
return -8;
}
nbpix = fimg->width * fimg->height;
for (foo=0; foo<nbpix; foo++) {
2022-07-06 10:27:55 +02:00
if ((fimg->R[foo]+fval) > fimg->G[foo])
2020-02-07 18:01:28 +01:00
fimg->B[foo] = fimg->R[foo];
else
fimg->B[foo] = fimg->G[foo];
2020-02-07 20:09:03 +01:00
}
return 0;
}
/* --------------------------------------------------------------------- */
2021-03-17 18:32:51 +01:00
/*
2024-05-01 21:38:19 +02:00
* parameter fval is used for what ?
2021-03-17 18:32:51 +01:00
*/
2020-02-07 20:09:03 +01:00
int fimg_killcolors_b(FloatImg *fimg, float fval)
{
int nbpix, foo;
if (FIMG_TYPE_RGB != fimg->type) {
fprintf(stderr, "%s: bad src type %d on %p\n", __func__,
fimg->type, fimg);
return -8;
2020-02-07 18:01:28 +01:00
}
2020-02-07 20:09:03 +01:00
nbpix = fimg->width * fimg->height;
for (foo=0; foo<nbpix; foo++) {
2022-07-06 10:27:55 +02:00
if ((fimg->R[foo]+fval) > fimg->B[foo])
2020-02-07 20:09:03 +01:00
fimg->G[foo] = fimg->R[foo];
else
fimg->G[foo] = fimg->B[foo];
}
2020-02-07 18:01:28 +01:00
return 0;
}
/* --------------------------------------------------------------------- */
2020-06-22 12:15:01 +02:00
int fimg_colors_mixer_a(FloatImg *fimg, float fval)
{
int nbpix, foo;
float R, G, B;
if (FIMG_TYPE_RGB != fimg->type) {
fprintf(stderr, "%s: bad src type %d on %p\n", __func__,
fimg->type, fimg);
#if MUST_ABORT
abort();
#endif
return -8;
}
nbpix = fimg->width * fimg->height;
for (foo=0; foo<nbpix; foo++) {
R = (fimg->G[foo] + fimg->B[foo]) / fval;
G = (fimg->R[foo] + fimg->B[foo]) / fval;
B = (fimg->R[foo] + fimg->G[foo]) / fval;
fimg->R[foo] = R;
fimg->G[foo] = G;
fimg->B[foo] = B;
}
return 0;
}
/* --------------------------------------------------------------------- */