Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaNa FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaTento text voln navazuje na minul lnek popisujc tu nejjednodu variantu vyplovacho algoritmu. Nyn se podvme na jeho vylepenou formu, kter potebuje cca tisckrt mn pamti a navc je rychlej.
Vtip je v tom, e msto abychom danou oblast vyplovali pixel po pixelu a do zsobnku ukldali vechny pixely okolo, kreslme po dcch a ukldme si jen urit "dleit" pixely, kterch je mnohonsobn mn.
Budeme potebovat pln stejn zsobnk jako minule: njak pole nebo cokoli, do kterho budeme strkat souadnice pixel na obrazovce (nap. array[...] of record x,y:integer end) a pak je z nj stylem LIFO (posledn vloen jde ven prvn) zase vyndavat. Teoreticky by to vlastn LIFO zsobnk bt nemusel, fungovalo by to i s FIFO frontou, ale LIFO je jednodu na naprogramovn a lp se s nm pracuje.
Vlastn algoritmus pak vypad takhle:

















A to je ve, ptel.
P.S.: je samozejm pln jedno, jestli budete testovat nejdve levou stranu a pak pravou nebo naopak. Ve uveden poad bylo zvoleno nhodn.
P.P.S.: je dobr slouit cykly pro nalezen konce aktulnho dku a testovn dk nahoe a dole do jednoho (maj stejn index).
P.P.P.S.: kdy se podmnka "le pixel uvnit oblasti a m se vybarvit?" zmn z tvaru (barva=pvodn_barva_oblasti) na tvar (barva<>barva_hranice)and(barva<>barva_kterou_vybarvujeme), zmn se tak Plechovka z Paintbrushe na Floodfill z Graph.tpu - barva se pelije pes jakkoli pozad a zastav se jedin o zadanou barvu okraje (nebo o barvu, kterou vybarvujeme, aby nevznikla nekonen smyka).
Jak je na tom tento algoritmus s rychlost? O nco lpe ne dve uveden varianta "bod po bodu do vech stran", protoe kresl cel dky najednou. Hlavn ale spotebovv o nkolik d mn pamti: ukld obvykle mn ne 10 bod na jeden dek, zatmco pedchoz algoritmus by jich poteboval nkolik stovek.
Rychlost ale pod jet nen zrovna pikov. Hlavn proto, e musme testovat spoustu pixel (na jednom dku doleva, doprava a pak to sam o dek nahoe i dole). Prvn urychlovac zlepovk, kter m napadl, byl pout msto Getpixelu Getimage, dky si nast do pamti cel a testovat je a tam (normln pam se te mnohem rychleji ne grafick). Jene zrychlen nen moc vrazn a hlavn se tm vrazn zpomal vyplovn malch oblast - devadest Getpixel je pod jet rychlej ne jeden Getimage pes celou ku obrazovky.