﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Grafický formát PNM (1)" directory="pnm.sachovnice">

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="pnm.sachovnice/.py" lang="python" />
  </example>
-->


  <example>
    <text>
        Vytvořte programem obrázek 8x8 šachovnice ve formátu PBM (varianta P1), tj. střídejte černá a bílá pole. Výstup by mohl vypadat třeba takto: <a href="pnm.sachovnice/1_ascii.pbm"><img src="_files/sachovnice/1_ascii.png" width="8" height="8" alt="ukázkový výstup šachovnice" align="bottom" /></a>
    </text>
    <hint>
        Cílem úlohy je spíše vymyslet vhodný způsob generování černých a bílých polí než jen prostě vyrobit obrázek.
    </hint>
    <solution src="pnm.sachovnice/1_pbm_ascii.py" lang="python" />
    <solution src="pnm.sachovnice/1_pbm_ascii.v2.py" lang="python" />
  </example>

  <example>
    <text>
        Zopakujte si předchozí úlohu, ale udělejte tu šachovnici větší, třeba 100x100 nebo i víc. Vyrobíte tak bezva zrakový klam ^_^<br/>
        Ukázkový výstup: <a href="pnm.sachovnice/2_ascii.pbm"><img src="_files/sachovnice/2_ascii.png" width="100" height="100" alt="ukázkový výstup šachovnice" align="center" /></a>
    </text>
    <hint>
        Ideálně byste mohli zobecnit algoritmus z první úlohy tak, aby zvládal libovolněrozměrné pole.
    </hint>
    <solution src="pnm.sachovnice/2_pbm_ascii.py" lang="python" />
  </example>

  <example>
    <text>
        Zopakujte si znovu první úlohu, ale tentokrát použijte formát PGM v ascii-variantě P2. Barvy políček generujte náhodně např. pomocí funkce <code>random.randint(SPODNÍ_MEZ, HORNÍ_MEZ)</code>. Ukázkový výstup: <a href="pnm.sachovnice/3_ascii.pgm"><img src="_files/sachovnice/3_ascii.png" width="8" height="8" alt="ukázkový výstup šachovnice" align="bottom" /></a>
    </text>
    <solution src="pnm.sachovnice/3_pgm_ascii.py" lang="python" />
  </example>

  <example>
    <text>
        Ještě jednou si zopakujte první úlohu, ale tentokrát v RGB-formátu PPM ve variantě P3. Přitom:
        <ul>
            <li> Barvy políček generujte sice náhodně, ale všechny v odstínu té samé barvy. </li>
            <li> Barvy políček generujte zcela náhodně. </li>
        </ul>
        Ukázkové výstupy: <a href="pnm.sachovnice/4_ascii_random.ppm"><img src="_files/sachovnice/4_ascii_random.png" width="8" height="8" alt="ukázkový výstup šachovnice" align="bottom" /></a> <a href="pnm.sachovnice/4_ascii_green.ppm"><img src="_files/sachovnice/4_ascii_green.png" width="8" height="8" alt="ukázkový výstup šachovnice" align="bottom" /></a>
    </text>
    <hint>
        Pro odstíny jedné barvy jeden z barvových kanálů náhodně měňte a pro zbývající dva vyberte vhodné pevné hodnoty.
    </hint>
    <solution src="pnm.sachovnice/4_ppm_ascii_green.py" lang="python" />
    <solution src="pnm.sachovnice/4_ppm_ascii_random.py" lang="python" />
  </example>

  <example>
    <text>
        Vyřešte znovu úlohu číslo 3, ale tentokrát použijte binární formát P5.
    </text>
    <hint>
        Úloha se dá řešit buď zápisem do binárního souboru (řešení 1) nebo zápisem do textového souboru (řešení 2). Řešení 1 vyžaduje znalost práce s binárními dat (tedy <code>b''</code>, <code>bytes()</code>, <code>bytearray()</code>), u řešení 2 si zase musíte dávat velký pozor, abyste zapsali skutečně jen to, co máte (čili na každý poslaný znak se musí zapsat skutečně pouze jeden bajt; primárně to znamená vybrat vhodné jednobajtové kódování a sekundárně pohlídat si platformně nezávislé zapisování <code>\n</code>, pokud ho budete používat jako oddělovač).
    </hint>
    <solution src="pnm.sachovnice/5_pgm_binary_bin.py" lang="python" />
    <solution src="pnm.sachovnice/5_pgm_binary_bin.v2.py" lang="python" />
    <solution src="pnm.sachovnice/5_pgm_binary_txt.py" lang="python" />
  </example>

  <example>
    <text>
        Vyřešte znovu úlohu číslo 4, ale tentokrát použijte binární formát P6.
    </text>
    <hint>
        Sem patří stejný komentář jako k úloze číslo 5.
    </hint>
    <solution src="pnm.sachovnice/6_ppm_binary_green_bin.py" lang="python" />
    <solution src="pnm.sachovnice/6_ppm_binary_green_bin.v2.py" lang="python" />
    <solution src="pnm.sachovnice/6_ppm_binary_green_txt.py" lang="python" />
    <solution src="pnm.sachovnice/6_ppm_binary_random_bin.py" lang="python" />
    <solution src="pnm.sachovnice/6_ppm_binary_random_bin.v2.py" lang="python" />
    <solution src="pnm.sachovnice/6_ppm_binary_random_txt.py" lang="python" />
  </example>

  <example>
    <text>
        Nakonec jsme si úmyslně nechali řešení úlohy číslo 1 (a případně pak i 2) v binárním formátu P4. Tento formát je totiž (z pochopitelných důvodů) velmi odlišný od všech ostatních zde probíraných. Ukázkový výstup: <a href="pnm.sachovnice/7_pbm_binary_bin.pbm"><img src="_files/sachovnice/7_pbm_binary_bin.png" width="8" height="8" alt="ukázkový výstup šachovnice" align="bottom" /></a>
    </text>
    <hint>
        Nezapomeňte, že formát P4 slučuje vždy osm sloupečků do jednoho bajtu – je totiž monochromatický. Plus si dejte pozor na správný převod znaků na bajty (viz komentáře k úlohám 5 a 6).
    </hint>
    <solution src="pnm.sachovnice/7_pbm_binary_bin.py" lang="python" />
    <solution src="pnm.sachovnice/7_pbm_binary_bin.v2.py" lang="python" />
    <solution src="pnm.sachovnice/7_pbm_binary_txt.py" lang="python" />
  </example>


</examples>
