Úloha 124: transformace obrázku vzorečkem

Úkolem je implementovat barevnou (pixelovou) transformaci rastrového obrázku. Pro každý pixel bude spuštěna Vaše funkce, která dostane barvu vstupního pixelu a přepočítá ji na barvu výsledného pixelu.

Example

Základ

Budete pracovat v prostředí projektu 117raster z repository grcis (GIT). Je připravena aplikace, jejíž popis je na této stránce

Vaše řešení bude používat modul ModuleFormula, o kterém již byla řeč. Pomocí CS-scriptu můžete pohodlně definovat funkci, která se pak spustí pro každý pixel obrázku (formula.pixelTransform0). Pokud budete chtít číst parametry z textového pole Param:, nadefinujete i funkci formula.contextCreate.

Alternativní možnost (pro pohodlnější editování zdrojáku ve Visual Studiu): místo CS-scriptu můžete Vaši implementaci psát rovnou v plnohodnotném jazyce C# podle vzoru modulu ModuleFormulaInternal. Logika věci je zachována, platí tedy popis uvedený níže. Jen se kód implementací neukládá v CS-scriptu, ale přímo v C# zdrojáku, který je součástí Vašeho projektu. Budete mít veškerý komfort editoru Visual Studia, naopak budete muset při každé změně aplikaci 117raster ukončit, přeložit a znova nastartovat (a znova aktivovat příslušný modul).

Příkladem scriptů, který se dají použít pro transformaci obrázků, jsou Contrast.cs a Swap.cs (oba najdete v adresáři projektu 117raster). První z nich zvětšuje jednoduchým způsobem kontrast, druhý dokáže vyměňovat barevné kanály R a B. Druhý skript používá uživatelský parametr.

Ve scriptu Swap.cs se můžete podívat, jak se mohou číst hodnoty z textového pole Param:. Pokud budete chtít nějakou hodnotu (parametr) předat do funkce formula.pixelCreate, vložíte ji do mapy Dictionary<string, object>, ta se vrací z funkce formula.contextCreate. Později ji v ic.context budou mít k dispozici pixelové funkce. Například v Swap.cs se čte parametr "coeff" definující míru výměny dvou barevných kanálů (nula znamená bez výměny, jednička úplnou výměnu R<->B).

Náměty

Nějaké barevné transformace, zvyšování sytosti nebo naopak převod na odstíny šedi (netriviální řízené křivkami barevných složek) nebo nějaké komplikovanější přebarvování (například splní-li vstupní barva danou podmínku, bude přebarvena, jinak zůstane nezměněna)... Pokud použijete parametrizaci, můžete dostat více bodů.

Barevné převody si nemusíte sami implementovat, v knihovně najdete různé varianty převodu mezi RGB a HSV: ColorToHSV(), HSVToColor(), RGBtoHSV(), HSVtoRGB() ... Věnujte pozornost komentářům, rozsahy vstupních a výstupních veličin se mohou funkce od funkce lišit.

Svoje řešení prosím uložte do podobného souboru jako je Contrast.cs nebo Swap.cs. Je potřeba definovat funkci formula.pixelTransform0 a případně formula.contextCreate pro parsing parametru.

Co odevzdat

Váš soubor s CS-scriptem, do komentáře připište stručný návod k použití, obzvlášť pokud budete používat parametry (uveďte jejich význam a povolený rozsah hodnot – například do tzv. tooltipu).

Alternativa: zdrojový soubor Vaší nové třídy, která je potomkem ModuleFormula.

Termín

Odevzdat do: 3. 1. 2021 (bude upřesněno po vydání příslušného videa)

Body

4 až 8 bodů podle zajímavosti, bonus za použití parametrů.

Projekt

Visual Studio projekt: 117raster

Zdrojový soubor

Jeden zdrojový soubor (CS-script), který lze použít jako plugin v modulu ModuleFormula. Nebo zdrojový soubor s implementací Vaší nové třídy, která je potomkem ModuleFormula.


Copyright (C) 2020 J.Pelikán, last change: 2020-12-03 07:45:56 +0100 (Thu, 03 Dec 2020)