Generování ASCII Artu

  • Úkol zadán: 16. 5. 2011
  • Odevzdávání naostro možné od: 16. 5. 2011
  • Absolutní konec odevdávání: 30. 6. 2011
  • Odevzdáváte soubory main.c, asciiart.c a asciiart.h do adresáře zav05.

Doplnění zadání (zobrazeno podtrženě):

  • zatím nic

Představení úkolu

Oblíbeným způsobem

Zadání

Mějme barevný obrázek o rozměrech 256×256 pixelů uložený v 24-bitové barevné hloubce. Barva pixelu je uložena ve formátu (red,green,blue), kde každá ze složek zabírá 8 bitů.

  1. Vytvořte si vlastní program MP3PlaylistGen, který bude obsahovat:
    1. Soubor main.c (bude obsahovat základní kód pro obsluhu parametrů příkazové řádky, nebude obsahovat implementaci dílčích funkcí potřebných pro generování MP3 playlistu)
    2. Soubory MP3PlaylistGen.c a MP3PlaylistGen.h (budou obsahovat podpůrné funkce využívané v souboru main.c)

Požadavky

  • Program MP3PlaylistGen bude očekávat jako vstup 2 parametry z příkazové řádky. Prvním bude jméno vstupního souboru (M3U soubor s nově vytvořeným playlistem) a druhým jméno adresáře, kde program zahájí prohledávání adresářové struktury. V případě, že tyto dva parametry nedostane, vypíše na standardní chybový výstup hlášku (dle vašeho uvážení) o tom, jak se má použít a skončí s nenulovým výstupním kódem.

Testování

  • Jak již bylo uvedeno, vzorové řešení je vám k dispozici na počítači aisa v adresáři /home/xsvenda/pb071/MP3PlaylistGen. Tento adresář zároveň obsahuje podadresář data s celou testovací adresářovou strukturou /home/xsvenda/pb071/MP3PlaylistGen/data.

Bonus

  • Pokud bude váš program korektně fungovat i nad složitější adresářovou strukturou aisa:/home/xsvenda/pb071/MP3PlaylistGen/data_bonus, získáváte +2 body

Poznámky

Poznámky:

Popis 24-bitového nekomprimovaného bmp formátu

  • Na začátku souboru je 54 Bytů, které zabírají 2 hlavičky ve kterých jsou informace o souboru a o vlastním obrázku. V první hlavičce (velikost 14 Bytů) jsou uloženy informace o bmp souboru. Jeho typ, Velikost a začátek vlastního obrázku (více viz. 1. tabulka).
  • Po hlavičce s informacemi o souboru následuje hlavička (velikost 40 Bytů) s informacemi o obrázku (viz. 2. tabulka). Z hodnot parametrů uložených v druhé hlavičce budete zřejmě potřebovat položky biWidth a biHeight. Ostatní jsou zde uvedené pouze pro úplnost.
  • Všechna dvou a čtyřbajtová čísla v obou hlavičkách jsou v souboru na disku uložena ve formátu little endian.
  • Po obou hlavičkách jsou v souboru uloženy jednotlivé pixely obrázku. Každý pixel zabírá 3*1 Byte (Blue, Green, Red). Pixely obrázku jsou uloženy v souboru po řadách jeden za druhým. První řada pixelů v souboru odpovídá nejspodnější řadě obrázku zobrazeného na obrazovce. Počet bajtů, které zabírá každý řádek pixelů v souboru, musí být číslo dělitelné čtyřmi. Na konec každého řádku v souboru jsou doplněny nuly, pokud platí, že „(počet_pixelů_na_řádku * 3) modulo 4 != 0.“
  • Příklad: Budeme-li mít obrázek široký 5 pixelů, zabere každá řádka obrázku 15B. Toto číslo však není dělitelné čtyřmi. Za každým pátým pixelem bude proto v souboru vložen jeden bajt s nulovou hodnotou.

1. tabulka: Hlavička bitmapového souboru:

Offset (Byte) od začátku souboru Velikost (Byte) Jméno Účel
0 2 bfType Má vždy ASCII hodnotu 'BM', decimálně 19778
2 4 bfSize Velikost celého souboru v Bytech
6 2 bfReserved1 Rezervováno. Musí se vždy rovnat 0
8 2 bfReserved2 Rezervováno. Musí se vždy rovnat 0
10 4 bfOffset Je v něm uloženo, po kolika bytech začínají data

2. tabulka: Info hlavička o bitové mapě:

Offset (Byte) od začátku souboru Velikost (Byte) Jméno Účel
14 4 biSize Velikost bmp info hlavičky (tato struktura) v bytech. Mělo by být rovno 40
18 4 biWidth Šířka obrázku v pixelech
22 4 biHeight Výška obrázku v pixelech
26 2 biPlanes počet řezů
28 2 biBitCount počet bitů na pixel (v našem příkladě 24)
30 4 biCompression Komprese. (v našem případě 0)
34 4 biSizeImage Velikost obrázku v bytech
38 4 biXPelsPerMeter Rozlišení obrázku v ose x. Počet pixelů na 1 metr.
42 4 biYPelsPerMeter Rozlišení obrázku v ose y. Počet pixelů na 1 metr.
46 4 biClrUsed Počet barev užitých v bitmapě (Má svůj účel při bytových hloubkách < 24)
50 4 biClrImportant Počet důležitých barev v bitmapě. (Má svůj účel při bytových hloubkách < 24)

3. tabulka: Struktura bmp souboru na disku:

Hlavička bmp souboru (14 Bytů) Info hlavička o bmp obrázku (40 Bytů) 1. pixel (B,G,R) (3*1 Byte) 2. pixel (B,G,R) 3*1 Byte atd…
  • Tuto úlohu připravil Pavel Černohorský, v případě dotazů kontaktujte Ondřeje Svobodu.
QR Code
QR Code public:asciiart_2011 (generated for current page)