komplexe Flächen ausfüllen

Hier sind die Datein als Anhänge.

Grüße Maik
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    160 Bytes · Aufrufe: 175
  • Unbenannt1.png
    Unbenannt1.png
    187 Bytes · Aufrufe: 179
  • Unbenannt2.png
    Unbenannt2.png
    215 Bytes · Aufrufe: 175
Danke für die Antworten!

Ich habe mich entschieden den Vorschlag von MiMi umzusetzen , denn bei Maik's Vorschlag glaube ich , dass es zu Problem bei Kreisen kommt.

Doch wenn ich nur alle Pixel nach x ausfülle dauter es ewig! :eek:

hier der Quellcode:

Aus der mousePressed - Methode
Java:
try 
{  
    //Farbe vom den Pixel auf den man klickt      			
    color = r.getPixelColor(e.getX() + pos.x, e.getY() + pos.y);
        			 
     füllen(e.getX(), e.getY(), color);
}

füllen-Mehtode
Java:
public void füllen(int x, int y, Color color) throws AWTException
    {
    	
    	if(suchXrechts == true)
    	{
                //Vergleich der Farben
    		if(pixelfarbe(x+1, y).equals(color))
    		{
    			gOffScreen.setColor(farbe);
                        //Pixel wird auf's BufferedImage gemalt
    			gOffScreen.fillRect(x+1, y, 1, 1);
    			x++;
    			System.out.println(x);
    			füllen(x, y, color);
    		}
    		else
    			suchXrechts = false;
    	} 
    }

und wie ich and die pixelfarbe komme
Java:
    public Color pixelfarbe(int x, int y) throws AWTException 
    {
		Color pixelcolor = r.getPixelColor(x + pos.x, y + pos.y);
		
    	return pixelcolor;
    }

Ich hoffe ihr habt eine Idee wie es schneller geht!
Denn wenn ich die ganze Methode so zu Ende schreibe dauert es am Ende Minuten! Und dann kann ich es komplett vergessen.

PS: Es liegt auf keinen Fall an meinem PC!!
 
Stimmt... an solche Formen dachte ich nicht...
Nur ich habe keine Idee wie ich dann die Methode aufbauen soll..
Könnt ihr mir da helfen ? :D
 
Na warum soll man denn solche Formen nicht ausfüllen können ?
Mit Rekursion wäre das kein Problem. Warum denn nur vom MousePoint ausgehen ? einfach so lange rekursiv durchgehen bis man die Ränder erreicht hat. Das funktioniert in jede Richtung.
 
@ externe Hoster
Funktioniert immer noch nicht, warum nicht foruminterne Anhaenge -.-

@Muepe
Ja der erste Link, das sieht relativ logisch aus :)
 
Danke Muepe32 für die Links! Waren echt hilfreich.

Habe die Methode so übernommen:

Java:
 public void füllen(int x, int y, Color color) throws AWTException
    {
    	if(pixelfarbe(x,y).equals(color))
    	{
    		gOffScreen.setColor(farbe);
    		gOffScreen.fillRect(x, y, 1, 1);
    		System.out.print(x+"     ");
    		System.out.println(y);
    		füllen(x+1,y,color);
    		füllen(x-1,y,color);
    		füllen(x,y+1,color);
    		füllen(x,y-1,color);
    	}
    }

Doch wenn man an das Ende kommt ( was man an der Ausgabe vom x und y sieht ) stellt man fest das der X Wert immer zwischen 2 Zahlen wechselt (z.B. 190 und 191 oder 3 und 4).
Wieso funktioniert es nicht ****
 
Umlaute im Code? *wegrenn

Und wieso
Java:
            System.out.print(x+"     ");
            System.out.println(y);
machts doch direkt in eine Zeile? Oo
 
Zurück