Vyfarbenie oblasti (CANVAS) – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vyfarbenie oblasti (CANVAS) – Java – Fórum – Programujte.comVyfarbenie oblasti (CANVAS) – Java – Fórum – Programujte.com

 

Tomáš
~ Anonymní uživatel
560 příspěvků
3. 5. 2014   #1
-
0
-

Ahojte potrebujem vyfarbiť oblasť na canvas-e, ktorú mi ohraničujú čiary.

Pre canvas mám vytvoréné pole, ktoré predstavuje pixel. Na každom pixeli mám zaznačené či sa na ňom nachádza čiara alebo nie .... 

Zatiaľ som to chcel robiť pomocou tejto metódy:

public void vyfarbi(Graphics g, Main_Data M_D, int x, int y){
        
        if(!M_D.getPix()[x][y].p_c.isEmpty()){
            return;
        }
        if (x<0 || x>850 || y<0 || y>760){
            return;
        }

            g.setColor(Color.red);
            g.drawLine(x, y, x, y);
        
        vyfarbi(g ,M_D, x+1, y);
        vyfarbi(g ,M_D, x, y+1);
        vyfarbi(g ,M_D, x-1, y);
        vyfarbi(g ,M_D, x, y-1);
    }

Avšak vždy sa mi to zacyklí ako keby do nekonečna ... nejak neviem asi správne dať tie podmienky pre ukončenie a som už z toho na prášky. Vedeli by ste mi pls pomoct???  Budem moc vdacny :) ...... eclipse mi vyhodí túto chybu: 


Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at sun.java2d.SurfaceData.isValid(Unknown Source)
    at sun.java2d.SunGraphics2D.getCompClip(Unknown Source)
    at sun.java2d.windows.GDIRenderer.drawLine(Unknown Source)
    at sun.java2d.SunGraphics2D.drawLine(Unknown Source)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:28)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:30)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:32)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:30)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:32)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:30)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:32)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:30)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:32)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:30)
    at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:32)
   ... toto sa potom dost opakuje

Nahlásit jako SPAM
IP: 158.255.249.–
Tomáš
~ Anonymní uživatel
560 příspěvků
3. 5. 2014   #2
-
0
-

#1 Tomáš
ešte pre doplnenie ...  

at xcicman_projekt_logika.Maliar.vyfarbi(Maliar.java:30) 

je toto:      vyfarbi(g ,M_D, x+1, y);

Nahlásit jako SPAM
IP: 158.255.249.–
Kit+15
Guru
3. 5. 2014   #3
-
0
-

#1 Tomáš
Nemá tam místo getPix()[x][y] být getPix(x, y)? Podle mizerných názvů se těžko soudí, co který objekt představuje a co která metoda dělá.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tomáš
~ Anonymní uživatel
560 příspěvků
3. 5. 2014   #4
-
0
-

#3 Kit
getPix() mi vráti pole pixelov a potom ja pomocou [x][y] sa dostanem na konkretny pixel .... p_c je list ciar a tam overujem ci je prazdny ak ano, dany pixel je prazdny

Nahlásit jako SPAM
IP: 158.255.249.–
Kit+15
Guru
3. 5. 2014   #5
-
0
-

#4 Tomáš

V tom případě metoda getPix() je chybně pojmenována. Nevidím ani důvod, proč by měla vracet celé pole pixelů, když potřebuješ jen jeden.

Jakmile název proměnné potřebuje vysvětlení, něco je špatně. Názvy proměnných se zásadně netvoří ze zkratek, kromě ustálených (např. dph).

p_c je tam podle mne zbytečně. Stejně kreslíš pixel po pixelu.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
z
~ Anonymní uživatel
268 příspěvků
3. 5. 2014   #6
-
0
-

Ještě tam přidej test, jestli se nevracíš na pixel, který jsi už zpracoval.

A jinak teda třída Graphics má i metodu fillPolygon...

Nahlásit jako SPAM
IP: 88.101.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

Podobná vlákna

Canvas — založil maral

Kreslenie do Canvas — založil lubo

Java - Canvas a tlačítka — založil Jou222

Uložení Canvas do souboru — založil pawlik

HTML 5 Canvas kniha — založil Jiří Ketner

Moderátoři diskuze

 

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