2020-11-10 03:58:18 +01:00
|
|
|
/*
|
|
|
|
* glitches.c
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include "../floatimg.h"
|
|
|
|
|
|
|
|
extern int verbosity;
|
|
|
|
|
|
|
|
/* -------------------------------------------------------------- */
|
2020-11-10 14:00:22 +01:00
|
|
|
int kill_a_random_line(FloatImg *pvictime, float fval, int bits)
|
2020-11-10 03:58:18 +01:00
|
|
|
{
|
|
|
|
int line, xpos, offset;
|
|
|
|
|
|
|
|
#if DEBUG_LEVEL
|
2020-11-10 14:00:22 +01:00
|
|
|
fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pvictime, bits);
|
2020-11-10 03:58:18 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
line = rand() % pvictime->height;
|
|
|
|
|
|
|
|
if (verbosity > 1) {
|
|
|
|
fprintf(stderr, "%s: try to kill line %d\n", __func__, line);
|
|
|
|
}
|
|
|
|
|
|
|
|
offset = pvictime->width * line;
|
|
|
|
|
2020-11-10 09:28:53 +01:00
|
|
|
for (xpos=0; xpos<pvictime->width; xpos++) {
|
2020-11-10 14:00:22 +01:00
|
|
|
if (bits & 1) pvictime->R[offset+xpos] = fval;
|
|
|
|
else pvictime->R[offset+xpos] = 0.0;
|
|
|
|
if (bits & 2) pvictime->G[offset+xpos] = fval;
|
|
|
|
else pvictime->G[offset+xpos] = 0.0;
|
|
|
|
if (bits & 4) pvictime->B[offset+xpos] = fval;
|
|
|
|
else pvictime->B[offset+xpos] = 0.0;
|
2020-11-10 03:58:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/* -------------------------------------------------------------- */
|
|
|
|
int kill_a_few_lines(FloatImg *who, float fval, int number)
|
|
|
|
{
|
|
|
|
int idx, foo;
|
|
|
|
|
|
|
|
/* Frag the pixels */
|
|
|
|
for (idx=0; idx<number; idx++) {
|
2020-11-10 14:00:22 +01:00
|
|
|
foo = kill_a_random_line(who, fval, rand() & 0x0f);
|
2020-11-10 03:58:18 +01:00
|
|
|
if (foo) abort();
|
|
|
|
}
|
|
|
|
|
|
|
|
return foo;
|
|
|
|
}
|
|
|
|
/* -------------------------------------------------------------- */
|
2020-11-10 19:30:49 +01:00
|
|
|
int un_petit_flou_8x8(FloatImg *picture, int xpos, int ypos)
|
|
|
|
{
|
|
|
|
float sr, sg, sb;
|
|
|
|
int x, y, off;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* please add boundary check ?
|
|
|
|
*/
|
|
|
|
|
|
|
|
sr = sg = sb = 0.0;
|
|
|
|
for (y=0; y<8; y++) {
|
|
|
|
off = xpos + (picture->width * (y+ypos));
|
|
|
|
for (x=0; x<8; x++) {
|
|
|
|
sr += picture->R[off];
|
|
|
|
sg += picture->G[off];
|
|
|
|
sb += picture->B[off];
|
|
|
|
off++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sr /= 64.0; sg /= 64.0; sb /= 64.0;
|
|
|
|
for (y=0; y<8; y++) {
|
|
|
|
off = xpos + (picture->width * (y+ypos));
|
|
|
|
for (x=0; x<8; x++) {
|
|
|
|
picture->R[off] = sr;
|
|
|
|
picture->G[off] = sg;
|
|
|
|
picture->B[off] = sb;
|
|
|
|
off++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/* -------------------------------------------------------------- */
|
|
|
|
int un_moyen_flou_8x8(FloatImg *picture, int xpos, int ypos)
|
|
|
|
{
|
|
|
|
int i, j, x, y;
|
|
|
|
|
|
|
|
for (i=y=0; i<8; i++, y+=8) {
|
|
|
|
for (j=x=0; j<8; j++, x+=8 ) {
|
|
|
|
un_petit_flou_8x8(picture, x+xpos, y+ypos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
/* -------------------------------------------------------------- */
|
|
|
|
int poke_a_random_pixel(FloatImg *picz, float fval, int kaboo)
|
|
|
|
{
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
/* -------------------------------------------------------------- */
|
2020-11-10 03:58:18 +01:00
|
|
|
|