Algorithmus für das Füllen einer Fläche

VoodooMan1985

Grünschnabel
Hi Leute,

ich bin hier gerade an einem Bild-Messanger dran sind, einem Netzwerk-Paint. Also der eine User malt etwas auf dem Bildschirm, wie in Paint, und der andere sieht das Gemalte dann in Echtzeit.

Jetzt habe ich nur folgendes Problem, und zwar beim Ausfüllen einer Fläche. Ich habe das mit einer rekursiven Funktion gemacht, funktioniert auch bei kleineren Flächen soweit. Nur hängt er sich ab einer bestimmten Größe auf.

mein Rekursive Funktion:
es wird bei allen vier Nachbarn nachgefragt, ob die zu überschreibende Farbe vorhanden ist, falls ja, wird diese Funktion auf die jeweilige Richtung angewandt.

Gibt es vielleicht andere schnellere Funktion?
 
Ich glaub, das Problem wird die Rekursion sein .. Ich habe auch keinen besseren Algorithmus gefunden.

Aufgrund der Rekursion wird ein ziemlich großes Speicherkonstrukt gebaut und erst abgebaut, wenn die Blätter des gebauten Baumes erreicht werden.

Wenn du den Algorithmus in einen sequentiellen Algorithmus umwandelst, sollte es gehen, denke ich.

Gruß Stefan
 
Also ich habe das jetzt folgendermaßen gelöst:

Ich habe die Linie, wo der Startpunkt drauf liegt komplett gefüllt, bis eine andere Farbe kommt.

Die x-Koordinaten vom linkesten und rechtesten gemalten Punkt der Linie habe ich mir gemerkt.

Dann habe ich jeweils für die Zeile darüber und darunter überrüft, ob es dort auch Punkte mit der Quellfarbe gibt, war das der Fall, habe ich diese Zeile ebenfalls ausgefüllt.

Das ist allerdings ebenfalls rekursiv und dazu noch mit langen Schleifen verbunden.

=> Es funktioniert zwar auch mit großen Flächen, aber ist stink lahm :-/.

Habt ihr noch weiter Verbesserungsvorschläge?
 
Zurück