[Denkhilfe] Eimer-/Füll-Funktion bei Paintprogrammen
Übersicht

bujaBetreff: [Denkhilfe] Eimer-/Füll-Funktion bei Paintprogrammen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bin mir schon seit tagen den kopf am zerbrechen wie man sich eine Eimerfunktion wie bei Paint schreiben kann?
Ich wollts eig erklären, mit Grenzflächen und so, aber ka wie ich das machen soll. Also wer Paint kennt und die Eimerfunktion weiß was ich meine. Falls jemand irgendeine Idee hat wie das ganze funktionieren könnte, bitte posten ![]() |
||
... |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Füllfunktion: Du bestimmst die Farbe des Pixels an der Mausposition. Dann wird er umgefärbt. Nun ruft sich die Funkrion selbst auf (rekursiv), aber mit den Koordinaten über, unter, links und rechts von der Startposition und mit der Farbe als Parameter die Du ausgelesen hast. Wenn die nicht identisch ist wird nimmer weiter gefüllt, ist sie identisch wiederholt sich das Spiel.
(Das ist allerdings nur einer von vielen Möglichen Ansätzen für ein floodfill) |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
buja |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, das hab ich mir auch so ähnlich gedacht.
Aber jetzt die Frage: stellen wir uns vor ich habe ein Rechteck gezeichnet, und nur das soll gefüllt werden, da es keine Lücken hat. Wenn ich also irgendwo im Rechteck klicke soll es ausgefüllt werden (Dabei ist die Farbe des Rechtecks-Randes egal so lange sie <> der aktuellen Farbe ist) Hätte das Rechteck irgendwo eine Lücke, soll es zwar ausgefüllt werden, aber das geht dann weiter durch die Lücke... (ich hoffe hab das so erklärt dass man es einigermaßen verstehen konnte) |
||
... |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich suche grade die Frage? | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
buja |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() Sorry, die Frage ist, wie könnte man sowas machen? Mir fehlen leider total die Ansätze dafür. Das Rechteck zu füllen dürfte kein Problem sein, aber wenn das Rechteck ne Lücke hat muss es ja weiter gehen. Und ab da habe ich keine Ahnung. ein mini ansatz: Pseudocode: Ändere Pixelfarbe solange Farbe <> ausgewählteFarbe If Pixelfarbe = ausgewählte Farbe ignorieren und Farbe lassen. [/code] |
||
... |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, aber genau das hab ich doch oben beschrieben. Es werden die 4 angrenzenden Punkte untersucht ob sie dieselbe Farbe wie der Punkt haben von dem ausgegangen wird und wenn ja wird gefüllt und von dort weitergesucht. Wenn nein wird auch nicht mehr weiter untersucht von der Stelle aus. Damit wird das ganze automatisch bis an die Grenzen füllen und bei einer Lücke auch durch diese hindurch. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
buja |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ups, nicht nachgedacht...
Mit deiner funktion wird ja praktisch immer weiter geprüft oder? Also ist meine Frage völlig unnötig da es ja von selbst wieder aufhört. [EDIT:] Mist da warst du schneller ![]() |
||
... |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://www-lehre.inf.uos.de/~c...index.html
(hoffe, dass ist das richtige Video) |
||
vertex.dreamfall.at | GitHub |
![]() |
IronstormErstklassiger Contest-Veranstalter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich mache es wie BladeRunner.
Ich nehme das ausgewählte Tile/Pixel, überprüfen die Felder oben, unten, rechts und links und setze dessen Koordinaten bei Übereinstimmung in ein Type. Lege also für jedes Feld ein neues an. Dann gehe ich alle Types neu durch und automatisch werden die nächsten überprüft. Solange bis sich in meiner Type-Liste nichts mehr ändert. MfG Ironstorm |
||
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine gute Erweiterung zu Paint wär, das man die "Stärke" einstellen kann, sodass es nicht nur genau gleich farbige pixel füllt sonder 5-15 rbg toleranz hat.
(Wen man zmb ein Bild Masken will dan hats immer noch einen Rand weil Paint einen "Farberlauf" kreiert, hoffe du weis was ich mein ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
GIMP! würd ich sagen ^^ ne ich hab des auch schon mit rects realisiert... war aber nicht besonders schneller.... weil du immer kucken musst von wo bis wo.... | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde Bladerunners Idee gar ned mal so schlecht ![]() (geht wahsrscheinlich au schnell) |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat mit dem Begriff Floodfill eigentlich schon das richtige Stichwort gegeben. ![]() Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf Blitzbasic.com findet man sowas im Codearchiv! | ||
Play Satyr! |
MCocktail |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hätte ein Beispiel, das leider bei mir zu so etwas wie Memory Leak führt, aber was solls...
BlitzBasic: [AUSKLAPPEN]
Das Programm stürtzt bei mir(also wenn ich diese Funktion verwende),ab. Ist das vielleicht trotzdem ein guter Ansatz? |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Ansatz kann sinnvolle Ergebnisse produzieren, wenn du darauf achtest, dass du nicht in endlosen Rekursionen landest. Momentan geht dein Programm wie folgt vor:
- Cool, der Pixel rechts von mir hat die gleiche Farbe. Ich rufe mal rekursiv auf: --- Cool, der Pixel links von mir hat die gleiche Farbe. Ich rufe mal rekursiv auf: ----- Cool, der Pixel rechts von mir hat die gleiche Farbe. Ich rufe mal rekursiv auf: --------- ... ZEVS P.S: Du machst dich unnötig unbeliebt, wenn du rote Warnungen in den Wind schlägst und in einem Thread schreibst, der bald fünf Jahre alt ist. |
||
MCocktail |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ZEVS hat Folgendes geschrieben: P.S: Du machst dich unnötig unbeliebt, wenn du rote Warnungen in den Wind schlägst und in einem Thread schreibst, der bald fünf Jahre alt ist. Nun ja, aber das Problem war aus meiner Sicht recht aktuell, schließlich wäre es ja schade, wenn andere die Probleme bei sowas haben, keine Antwort bekommen, nur weil der thread bald sein 5. Jubiläum feiern wird. Die Problematik bei sowas seh ich nicht richtig ein. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du das exakt selbe Problem und der alte Thread bringt dir keine Lösung? Dann fühle dich frei, einen neuen Thread zu eröffnen (und ggf. auf diesen zu verweisen). | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Um das ganze flott aufzulösen, bevor es noch leichenschändungsprobleme gibt:
Es bedarf meiner ansicht nach 2 änderungen. ZEVS hat ganz recht erkannt was sache ist: Es wird ERST der umliegende bereich geprüft, DANN wird geplottet. Würde erst geplottet werden und DANN die umgebung gecheckt, würde es nichtmehr andauernd zu einer unendlichen rekursion kommen. Um genauer zu sein, nurnoch ein spezialfall würde dafür sorgen: 1) Getcolor(x,y) zeigt die selben farbwerte auf wie r,g,b angibt und 2) es existiert noch ein anderer pixel der farbe irgendwo nebenan (oben,unten, links, rechts) Hier mal mein mit halbwissen verbesserter code: BlitzBasic: [AUSKLAPPEN]
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group