Die Rekursion kann man vergessen (bringt regelmäßig Stackoverflow).
BTW, wie würde denn ein Algorithmus für fsBorder aussehen?
fsSurface ist ja dieser:
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 IsCurrentColor(P.X, P.Y) then // OldColor;
begin
FPixels[P.X, P.Y] := FBrushColor; // NewColor;
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;