úloha 081: Obrázek obsahující všech 16M barev

Úkolem je vygenerovat nějaký zajímavý obrázek obsahující všechny 24-bitové barvy! (musí tedy mít minimálně 16M pixelů). Můžete obrázek generovat implicitně (podle zadaných parametrů) nebo můžete použít jako předlohu jiný rastrový obrázek. Musíte však v každém případě zajistit, že na výstupu bude všech 224 různých RGB barev!

Základ

Základem poslouží projekt 081fullcolor z repository grcis. Je připravena jednoduchá aplikace, ve které je možné načíst vstupní obrázek, zadat textový parametr a nechat výstup vygenerovat. To má na starosti metoda Generator.Recompute() přepočítávající výstupní obrázek. Tuto metodu musíte přeprogramovat, příslušný úsek kódu je ve zdrojáku Generator.cs označen závorkami:

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

Screenshot

Technicky

Funkce Generator.Recompute() má tyto parametry:
  • Bitmap input vstupní obrázek; nepovinný, může být null
  • out Bitmap output - výstupní bitmapu, do které musíte zapsat výsledek
  • bool fast - příznak, zda se má počítat rychlým přístupem do paměti bitmapy (viz níže, nemusíte používat)
  • string param - volitelný parametr ve formě řetězce, pokud ho použijete, budete muset sami zadefinovat co a v jakém formátu má smí obsahovat (pilotní implementace obsahuje zadání rozlišení výstupu pomocí dvou celých čísel oddělených čárkou)

Po vygenerování obrázku vaší procedurou se automaticky spočítá počet barev výsledného obrázku a do informační řádky vpravo dole se kromě času trvání výpočtu napíše, kolik barev vám chybí do plného počtu 224. Pokud máte výsledek správně a barvy jsou tam všechny, napíše se místo čísla "Ok".

Pro pohodlné ladění i pro odevzdání nějakého pěkného nastavení prosím modifikujte inicializační proceduru InitParams() (pokud používáte textový parametr). Ta se zavolá vždy na začátku při inicializaci formuláře.

Jako řešení úlohy posílejte mailem pouze modifikovaný zdrojový soubor Generator.cs! Nepřijímám celé Visual Studio projekty!
Na první řádce v komentáři napište své jméno.

Programátorské detaily

Pilotní implementace demonstruje několik dalších technických detailů:
  1. vytvoření instance výstupního rastrového obrázku s pevným formátem Format24bppRgb
  2. rychlý přístup k binárním datům pixelů - pomocí metody Bitmap.LockBits() a unsafe bloku s použitím ukazatelů do uzamčeného paměťovém bloku
  3. výpočet v samostatném vlákně - s vhodnou frekvencí je nutné v cyklech kontrolovat hodnotu globální logické proměnné Form1.cont (při hodnotě false by měl algoritmus co nejdříve předčasně skončit)
  4. Drag & Drop vstupního obrázku - vstupní soubor můžete do formuláře přenést myší z jakékoli aplikace Windows podporující D&D.

Co odevzdat

Musíte poslat zdrojový soubor Generator.cs.
Na první řádce v komentáři napište své jméno.
Do procedury InitParams() můžete napsat sadu vhodných vstupních parametrů.
Pokud použijete stringový parametr param, nezapomeňte popsat jeho formát a sémantiku.
Pokud používáte vstupní obrázek a s nějakým konkrétním vstupem jste dosáhli pěkného výsledku, můžete poslat i ten vstupní obrázek. Ale pozor na velikost přílohy, radši ho někam vystavte (Dropbox, GoogleDrive, uloz.to) a pošlete jen URL.

Termín

Odevzdat do: 15. 11. 2015

Body

Základ: 6 bodů, bonus 4 body za použití vstupního obrázku (musí jít použít jakýkoli obrázek) a další bonus až 5 bodů (invence, estetika, rychlost..).

Projekt

Visual Studio projekt: 081fullcolor.

Zdrojový soubor

Modifikujte a odevzdejte soubor: Generator.cs
Do komentáře na první řádce napište své jméno!


Copyright (C) 2015 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)