8 Netpbm files

Na poslednú úlohu je viacej času a je za dvojnásobný počet bodov.

Existuje jeden veľmi jednoduchý formát na ukladanie obrázkov, viete sa o ňom dočítať na wikipédií. V zásade je to šesť rôznych formátov, tri textové a tri binárne. (Existuje ešte siedmi, ale ten my používať nebudeme.) Rovnako formát môže teoreticky podporovať aj väčšiu bitovú hĺbku ako 8bit (teda 0-255), ale to tiež nepodporujeme.

Čiže ak bude na vstupe formát P7, alebo väčšia hĺbka ako 255, tak treba vypísať chybu na skončiť s nenulou.

Samotná aplikácia bude mať prvé tri parametre cestu k súboru vstupnú, výstupnú a výstupný formát. Teda napríklad

uloha8.exe input.pbm output.xxx P6

Načíta vstupný súbor, zistí v akom je formáte (tu sa nehrá na prípony, ale na hlavičku) a potom ho skonvertuje do formátu P6 a zapíše do výstupného súboru. Konverzia môže stratiť informáciu, tak keď sa ide z farebného rastra do šedého, tak sa urobím priemer kanálov a zaokrúhli sa pomocou funkcie round(), ak sa ide zo šedého do čiernobieleho, tak sa urobí oseknutie, teda 0-127 sa stane 1 a 128-255 sa stane 0 (ak je maximum bielej iné ako 255, napríklad 30, tak potom [0..30/2] bude čierna a (30/2..30] bude biela (kde / je štandardné celočíselné delenie ako má C++ a ( je otvorený interval a ] je uzavretý interval). Komentáre nemusíte zachovávať a rovnako whitespace pridávajte ako chcete, ide len o to aby sa takýto obrázok dal normálne otvoriť. Vedia to všetky lepšie prehliadače obrázkov ako napríklad IrfanView.

Špecifikácia binárneho formátu

Bonus

Implementovanie posledného optional parametra. --rotateXXX, ktorý orotuje výstupný obrázok vpravo. Teda povolené sú štyri parametre --rotate0, --rotate90, --rotate180 and --rotate270. Bonus je za 1bod.

Príklady formátov

Sú to tie z wiki, ale aj prekonvertované do binárnych formátov.