1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| void flood_fill (image I, int x, int y, colour couleur_de_remplissage)
{
int position_P1 = image_offset (I, x, y);
fifo F = standard_empty_fifo_create (NULL, NULL, NULL, NULL);
fifo_push (F, (void*) position_P1);
int position_P_nord = 0;
int position_P_sud = 0;
int position_P_est = 0;
int position_P_ouest = 0;
int position_P_diagonale_haut_gauche = 0;
int position_P_diagonale_bas_gauche = 0;
int position_P_diagonale_haut_droite = 0;
int position_P_diagonale_bas_droite = 0;
while (!is_fifo_empty (F))
{
/*
assert (position_P1 >= 0);
assert (position_P_nord >= 0);
assert (position_P_sud < I->h);
assert (position_P_est < I->w);
assert (position_P_ouest >= 0);
*/
if (position_P_sud > I->h) position_P_sud = I->h - 1;
if (position_P_nord < 0) position_P_nord = 0;
if (position_P_est < 0) position_P_est = 0;
if (position_P_ouest > I->w) position_P_ouest = I->w -1;
position_P1 = (int) fifo_pop (F);
/*if ((I->pixel[position_P1] != c) && (I->pixel[position_P1] == 0x000000FF)) return;*/
/*if (I->pixel[position_P1] == 0x000000FF) return;*/
if (I->pixel[position_P1] != couleur_de_remplissage) I->pixel[position_P1] = couleur_de_remplissage;
position_P_nord = position_P1 - I->w;
position_P_sud = position_P1 + I->w;
position_P_est = position_P1 + 1;
position_P_ouest = position_P1 - 1;
position_P_diagonale_haut_gauche = position_P_nord - 1;
position_P_diagonale_bas_gauche = position_P_sud - 1;
position_P_diagonale_haut_droite = position_P_nord + 1;
position_P_diagonale_bas_droite = position_P_nord + 1;
/*
if (position_P_diagonale_haut_gauche < 0) position_P_diagonale_haut_gauche = 0;
if (position_P_diagonale_haut_droite > I->w) position_P_diagonale_haut_droite = I->w - 1;
if (position_P_diagonale_haut_droite < 0) position_P_diagonale_haut_droite = 0;
if (position_P_diagonale_bas_droite > I->w) position_P_diagonale_haut_droite = I->w - 1;
if (position_P_diagonale_bas_droite > I->h) position_P_diagonale_bas_droite = I->h - 1;
if (position_P_diagonale_bas_gauche < 0) position_P_diagonale_bas_gauche = 0;
if (position_P_diagonale_bas_gauche > I->h) position_P_diagonale_bas_gauche = I->h -1;
*/
if ((I->pixel[position_P_nord] != couleur_de_remplissage) && (I->pixel[position_P_nord] != 0x000000FF))
fifo_push (F, (void*) position_P_nord);
if ((I->pixel[position_P_sud] != couleur_de_remplissage) && (I->pixel[position_P_sud] != 0x000000FF))
fifo_push (F, (void*) position_P_sud);
if ((I->pixel[position_P_est] != couleur_de_remplissage) && (I->pixel[position_P_est] != 0x000000FF))
fifo_push (F, (void*) position_P_est);
if ((I->pixel[position_P_ouest] != couleur_de_remplissage) && (I->pixel[position_P_ouest] != 0x000000FF))
fifo_push (F, (void*) position_P_ouest);
/*
if ((I->pixel[position_P_diagonale_haut_gauche] != couleur_de_remplissage) && (I->pixel[position_P_diagonale_haut_gauche] != 0x000000FF)) fifo_push (F, (void*) position_P_diagonale_haut_gauche);
if ((I->pixel[position_P_diagonale_haut_droite] != couleur_de_remplissage) && (I->pixel[position_P_diagonale_haut_droite] != 0x000000FF)) fifo_push (F, (void*) position_P_diagonale_haut_droite);
if ((I->pixel[position_P_diagonale_bas_gauche] != couleur_de_remplissage) && (I->pixel[position_P_diagonale_bas_gauche] != 0x000000FF)) fifo_push (F, (void*) position_P_diagonale_bas_gauche);
if ((I->pixel[position_P_diagonale_bas_droite] != couleur_de_remplissage) && (I->pixel[position_P_diagonale_bas_droite] != 0x000000FF)) fifo_push (F, (void*) position_P_diagonale_bas_droite);
*/
fifo_remove(F);
}
fifo_destroy(&F);
} |
Partager