úloha 009: Záplavové vyplňování

Úkolem je implementovat přebarvovací variantu záplavového vyplňování v rovině. Vstupem algoritmu je rastrový obrázek s již nakreslenou hranicí, počátek vyplňování a barva, kterou se má souvislá oblast přebarvovat.

Základem poslouží projekt 009floodfill z repository grcis. Je připravena jednoduchá aplikace, která náhodně generuje hranice i příkazy k vyplňování. Metoda Draw.FloodFill4() má za úkol najít a vybarvit 4-souvislou oblast s počátkem v daném pixelu. Příslušný úsek kódu je ve zdrojáku FloodFill.cs označen závorkami:

  // !!!{{
  // !!!}}

Náměty: preferuji řádkový algoritmus, ale body dostane i řešení s frontou a přístupem pixel-po-pixelu. 4-souvislé vyplňování je podmínkou, za body navíc můžete implementovat i 8-směrovou variantu.

Technicky: vstupní/výstupní obrázek je předáván jako parametr (typ Bitmap). Musíte ošetřit souřadnice, přes které budete do obrázku přistupovat, nesmíte opustit přípustný interval (0 až Width-1, 0 až Height-1)!
Asi by bylo lepší používat rychlejší přístup do bitmapy obrázku (můžete předpokládat formát pixelu RGB 24-bit), ale není to podmínkou.

TERMÍN: do 28. 11. 2010

BODY: 8 až 14 bodů (hodnotím obecnost /4-směr, 8-směr/ a rychlost)

PROJEKT: 009floodfill

ZDROJOVÝ SOUBOR: FloodFill.cs

METODA: Draw.FloodFill4(), příp. i Draw.FloodFill8()

CHYBY v odevzdaných řešeních: protože se u této úlohy stalo, že mnoho kolegů mělo ve svých algoritmech chybu, commitnul jsem do repository přesné testovací podmínky: fills = 30, seed = 12, rozlišení 800x800. Musí vám vyjít Hash = D9DAB4CB4FE0BCED, zde je správný výsledný obrázek.


[Cvičení NPGR003]  [Návody k zápočtům v C#]  [Přednášky a semináře]  [Odkazy na demonstrace]

Valid XHTML 1.1 Copyright (C) 2010 J.Pelikán, last change: $Date: 2014-10-03 15:44:39 +0200 (Fri, 03 Oct 2014) $
Send comments/requests to pepca.at.cgg.mff.cuni.cz