Die Rekursion kann man vergessen (bringt regelmäßig Stackoverflow).
So pauschal stimmt das einfach nicht. Fläche klein genug oder Stack groß genug, und schon ist alles gut. (Ja, mit einem eigenen Stack ist man fast immer besser beraten, aber dennoch ist die Aussage faktisch falsch.)
Zitat:
BTW, wie würde denn ein Algorithmus für fsBorder aussehen?

Ich vermute du meinst die Unterscheidung zwischen "fülle diese einfarbige Fläche" und "fülle alles was von einem Rand mit Farbe X umgeben ist". Dann wäre "fsBorder":
Delphi-Quellcode:
procedure TFloodFill.FloodFill4(X, Y: integer);
var
P: TPoint;
Stack: TPointStack;
begin
Stack := TPointStack.Create;
try
Stack.Push(Point(X, Y));
while not Stack.Empty do
begin
P := Stack.Pop;
if not IsBorderColor(P.X, P.Y) then
begin
FPixels[P.X, P.Y] := FBrushColor;
Stack.Push(Point(P.X, P.Y + 1));
Stack.Push(Point(P.X, P.Y - 1));
Stack.Push(Point(P.X + 1, P.Y));
Stack.Push(Point(P.X - 1, P.Y));
end;
end;
finally
Stack.Free;
end;
end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)