Bonjour !

Je cherche un peu d'aide pour une fonction de remplissage qui fonctionnerais comme le pot de peinture des logiciels graphiques.

J'ai réussi à avoir un code fonctionnel mais si la zone à remplir est trop grande j'ai droit à un joli StackOverflowError. Ce n'est pas un problème de "boucle infinie" mais de trop grande récursivité (si je prend une zone plus petite tout vas bien, mais je doit pouvoir gérer de grandes zones)

Ma question étant : quelqu'un pourrait convertir ce code pour obtenir la même chose en non-récursif ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
	public void fillGrid(Point point)
	{
		// grid est un boolean[][] sans limite de taille
		fillBlockedArea(point, !grid[point.x][point.y]);
	}
 
	private void fillGrid(Point point, boolean set)
	{
		grid[point.x][point.y] = set;
		if (point.x - 1 > 0)
		{
			if (grid[point.x - 1][point.y] != set)
				fillGrid(new Point(point.x - 1, point.y), set);
		}
		if (point.x + 1 < grid.length)
		{
			if (grid[point.x + 1][point.y] != set)
				fillGrid(new Point(point.x + 1, point.y), set);
		}
		if (point.y - 1 > 0)
		{
			if (grid[point.x][point.y - 1] != set)
				fillGrid(new Point(point.x, point.y - 1), set);
		}
		if (point.y + 1 < grid[point.x].length)
		{
			if (grid[point.x][point.y + 1] != set)
				fillGrid(new Point(point.x, point.y + 1), set);
		}
	}
Cette grille me sert à avoir un rendu graphique en pixel par pixel, donc voilà un exemple de ce qui est voulu (les pixels noirs sont à true et les autres à false) :
Nom : Sans titre.png
Affichages : 306
Taille : 855 octets
(Pour résumer : cette fonction fonctionne mais il faudrait un équivalent non-récursif)