Ausfüllen
Übersicht BlitzBasic Beginners-Corner
GastBetreff: Ausfüllen |
Fr, Okt 01, 2004 17:36 Antworten mit Zitat |
|
---|---|---|
Hi!
Bin gerade dabei ein Graphicprogramm zu erstellen! Bei Paint gibt es eine "ausfüllen Funktion" die ich auch gerne einbauen würde. Bei Paint ganz links kann man die Funktionen auswählen. Bei der rechten Spalte die 2. Zeile von oben, ist die Funktion die ich auch erstellen möchte. ich versuche es aber auch zu erklären: seht euch mal diesen Quelltext an: Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() ClsColor 0,0,0 Cls Color 255,255,255 Rect 200,200,400,200 Color 00,0,0 Rect 250,250, 300,100 WaitKey das sind nur ein paar rechtecke! wenn ich in das "innerste" Rechteck klicke soll es statt weiss schwarz werden, wobei das äußere schwarze rechteck die farbe behalten soll! wenn ich aber noch ein rechteck einbaue, Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() ClsColor 0,0,0 Cls Color 255,255,255 Rect 200,200,400,200 Color 00,0,0 Rect 250,250, 300,100 Color 0,0,0 Rect 300,0,20,300 WaitKey ...und in das mittlere feld klicke, soll auch das weiß werden. ABER: in einem Programm kann man individuell eigene schritte machen, wo ich weitere punkte, kreise,usw zeichen kann und diese sollen auch beachtet werden! ist sehr kompliziert zu beschreiben, ich weiß. Könnt ihr mir vielleicht einen Quellcode dazu schicken, wie ich das machen könnte? Danke lg |
||
sidolin |
Fr, Okt 01, 2004 17:42 Antworten mit Zitat |
|
---|---|---|
warum ein grafik-programm selber progen ? es genug für umme. also ich würd mir nicht die mühe machen. | ||
..:: P4 1500 MHZ : 512 MB RDRAM : GFORCE 4 ::.. |
totonak5 |
Fr, Okt 01, 2004 17:44 Antworten mit Zitat |
|
---|---|---|
weiß ich!
aber ich möchte bestimmte Funktionen einmal selbst programmieren oder zumindest versuchen! nur so als übung halt! so einfache sachen bringe ich schon zusammen. lg |
||
Just for Fun!
Jesus loves U! |
BladeRunnerModerator |
Fr, Okt 01, 2004 17:53 Antworten mit Zitat |
|
---|---|---|
Ok, Code wirst du keinen erhalten, aber ich geb dir mal ne Anregung für das was du willst (Füllfunktion).
Wenn du irgendwo mit der Maus klickst, merkst du dir die Farbe des Punktes an den Du geklickt hast. dann setzt du diesen punkt auf die Füllfarbe. Dann schaust du bei den Punkten links,rechts oben und unten vom ersten punkt ob sie die zu befüllende farbe haben. wenn ja, werden auch sie gefüllt. so geht das Spielchen weiter bis nur noch punkte gefunden werden, welche nicht der beim ersten Mausklick gefundenen Farbe entsprechen. Ideal hierfür ist eine sich selbst aufrufende (=rekursive) Funktion. Der Ansatz hier ist noch nicht perfekt (es ist zB möglich dass es zu "Lecks" kommt welche den Bildschirm fluten), aber er stellt eine Möglichkeit dar. Mal dir das vorgehen dieses Algos mal auf ein Stück Papier und tüftle einen Code aus. (es gibt natürlich noch dutzende andere. Du könntest die Zeichenhierarchie in einem Dim-Feld speichern und und und ...) |
||
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 |
totonak5 |
Fr, Okt 01, 2004 18:15 Antworten mit Zitat |
|
---|---|---|
ja, das möchte ich auch so machen.
aber wenn ich diese punkte dann auch "dauerhaft einfärben" will muss ich das mit feldern machen. wenn ich das auf einem format von 800,600 mache, muss ich ein 480000er Feld machen aber das ist einfach zu groß. ich suche nach einer anderen lösung. lg |
||
Just for Fun!
Jesus loves U! |
BladeRunnerModerator |
Fr, Okt 01, 2004 18:28 Antworten mit Zitat |
|
---|---|---|
Glaub mir es geht so (ich hab exakt so eine Füllroutine geschrieben). Du kannst ja schon gefüllte Pixel aus der Liste streichen, und bei einer (eventuellen) nochmaligen Prüfung werden sie ja nicht mehr aufgenommen, da schon gefüllt.
Das Array wird also nicht maximal gross werden. |
||
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 |
rambo256 |
Fr, Okt 01, 2004 18:43 Antworten mit Zitat |
|
---|---|---|
mach das mit readpixelfast.
damit checkst du dann die farbe der umliegenden punkte ab und dann,wenn sie der farbe entsprecen,wo du draufgeklickt hast,zeicnest du mit writepixelfast einen punkt in der entsprechenden farbe hin. ist so mein erster gedanke. |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
totonak5 |
Sa, Okt 02, 2004 11:39 Antworten mit Zitat |
|
---|---|---|
das versteh ich nicht wie soll ich die aus der liste streichen??? | ||
Just for Fun!
Jesus loves U! |
Firstdeathmaker |
So, Okt 03, 2004 5:16 Antworten mit Zitat |
|
---|---|---|
Ich versteh das mit dem Dim-Feld nicht. Das braucht man doch hier garnicht. Man hat doch die Farbwerte schon auf dem Bildschirm/Buffer. Der Funktioniert doch genauso.
Zu der eigentlichen Frage (Beispielcode, nur so vom Ansatz her...): Code: [AUSKLAPPEN] Function ausfuellen(x,y,farbwert)
lockbuffer ;Deinbuffer; original=readpixelfast(x,y) writepixelfast x,y,farbwert ausfuellen2(x-1,y,farbwert,original) ausfuellen2(x+1,y,farbwert,original) ausfuellen2(x,y-1,farbwert,original) ausfuellen2(x,y+1,farbwert,original) unlockbuffer ;Deinbuffer; end function Function ausfuellen2(x,y,farbwert,original) if readpixelfast(x,y)=original writepixelfast x,y,farbwert ausfuellen2(x-1,y,farbwert,original) ausfuellen2(x+1,y,farbwert,original) ausfuellen2(x,y-1,farbwert,original) ausfuellen2(x,y+1,farbwert,original) endif end function |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
BladeRunnerModerator |
So, Okt 03, 2004 14:37 Antworten mit Zitat |
|
---|---|---|
Zitat: aber wenn ich diese punkte dann auch "dauerhaft einfärben" will muss ich das mit feldern machen.
Wenn du alles in den Imagebuffer schreibst kannst du dir ein Feld welches jeden Pixel enthält sparen. Du darfst den Buffer nur später nicht löschen. Wenn Du ein "Undo" willst gibt es mehrere Möglichkeiten: 1. nach jedem Arbeitsschritt den Imagebuffer zwischenspeichern (klappt immer, aber sehr speicherintensiv) 2. Du speicherst nur die "einsprungpunkte" der aufgerufenen Funktionen ab einem Startbild. Erneutes Aufrufen der Funktionen mit den Startwerten ab diesem Bild stellt das gewünschte Ergebnis her. (aufwändiger, jedoch sehr platzsparend) 3. Du berechnest in einer Funktion die unterschiedlichen Bytes zwischen Altem und neuen Bild und speicherst komprimiert diese Änderungen (variabler Platzbedarf, recht kompliziert). |
||
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 |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group