Anonymní profil Thom – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Thom – Programujte.comAnonymní profil Thom – Programujte.com

 

Příspěvky odeslané z IP adresy 91.221.212.–

Tom
Java › Flood fill (vyplnění barvou)
2. 1. 2016   #207687

Zdravím prosím vás mám takový problém, když vybarvuji např. trojúhelník a použiji algoritmus, který se pohne maxilalně jen 2x po ose x a y. A program se mi hned zacyklí.

Tato to sekvence opakuje dokola

Vstupní bod: x 500 y 250

x 501 y 250
x 499 y 250
x 500 y 251
x 500 y 249
x 502 y 250
x 502 y 250
x 500 y 250
x 501 y 251
x 501 y 249
x 500 y 250

Prosím poraďte co mám dělat už mi došli nápady.

public boolean compare(G_Color prvni , G_Color druhy){
        return prvni == druhy;
}
public void floodfill(float [][] bod , G_Color barva ) 
        {
          int x,y;  
          x = (int)bod[0][0];
          y = (int)bod[1][0]; 
        
        G_Color hranice = new G_Color(0, 0, 0);    
            
            
        Zasobnik zacatek, konec;
        zacatek = null;
        konec = null;
        
        Zasobnik p= new Zasobnik (x,y);
        zacatek = p;
        konec = p;
        
        while (zacatek!=null)
            {
               
                if (!compare(getPixel(zacatek.x-1, zacatek.y), barva) && (!compare(getPixel(zacatek.x-1, zacatek.y), hranice)))
                {
                p = new Zasobnik (zacatek.x-1,zacatek.y);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x-1, zacatek.y, barva);
                                
                }
            
            if (!compare(getPixel(zacatek.x+1, zacatek.y), barva) && (!compare(getPixel(zacatek.x+1, zacatek.y), hranice)))
                {
                p = new Zasobnik (zacatek.x+1,zacatek.y);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x+1, zacatek.y, barva);
                
                }
            
            if (!compare(getPixel(zacatek.x, zacatek.y-1), barva) && (!compare(getPixel(zacatek.x, zacatek.y-1), hranice)))
                {
                p = new Zasobnik (zacatek.x,zacatek.y-1);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x, zacatek.y-1, barva);
                
                }
            
            if (!compare(getPixel(zacatek.x, zacatek.y+1), barva) && (!compare(getPixel(zacatek.x, zacatek.y+1), hranice)))
                {
                p = new Zasobnik (zacatek.x,zacatek.y+1);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x, zacatek.y+1, barva);
               
                }
                 zacatek=zacatek.dalsi;
                }
        }

public class Zasobnik {
	public int x;
        public int y;        
	Zasobnik dalsi;
	
	Zasobnik(int x,int y) {
                this.x = x;
                this.y = y;
		dalsi = null;
	}
        
}
Thom
Java › Seed fill (vyplňovací algori…
29. 12. 2015   #207594

Zdravím potřeboval bych pomoct s tím to floodfillem neustále se mi zacykluje a dělá jenom 4 sekvence pořád dokola.

public boolean compare(G_Color prvni , G_Color druhy){
        return prvni != druhy;
}
public void floodfill(float [][] bod , G_Color barva ) 
        {
          int x,y;  
          x = (int)bod[0][0];
          y = (int)bod[1][0]; 
        
        G_Color hranice = new G_Color(0, 0, 0);    
            
            
        Zasobnik zacatek, konec;
        zacatek = null;
        konec = null;
        
        Zasobnik p= new Zasobnik (x,y);
        zacatek = p;
        konec = p;
        
        while (zacatek!=null)
            {
               
                if (compare(getPixel(zacatek.x-1, zacatek.y), barva) && (compare(getPixel(zacatek.x-1, zacatek.y), hranice)))
                {
                p = new Zasobnik (zacatek.x-1,zacatek.y);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x-1, zacatek.y, barva);
                                
                }
            
            if (compare(getPixel(zacatek.x+1, zacatek.y), barva) && (compare(getPixel(zacatek.x+1, zacatek.y), hranice)))
                {
                p = new Zasobnik (zacatek.x+1,zacatek.y);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x+1, zacatek.y, barva);
                
                }
            
            if (compare(getPixel(zacatek.x, zacatek.y-1), barva) && (compare(getPixel(zacatek.x, zacatek.y-1), hranice)))
                {
                p = new Zasobnik (zacatek.x,zacatek.y-1);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x, zacatek.y-1, barva);
                
                }
            
            if (compare(getPixel(zacatek.x, zacatek.y+1), barva) && (compare(getPixel(zacatek.x, zacatek.y+1), hranice)))
                {
                p = new Zasobnik (zacatek.x,zacatek.y+1);
                konec.dalsi=p;
                konec=p;
                putPixel(zacatek.x, zacatek.y+1, barva);
               
                }
                 zacatek=zacatek.dalsi;
                }
        }

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý