Extra

Van tekst naar beeld

In het werkcollege heb je bestaande afbeeldingen bewerkt. In deze facultatieve opgave maak je zelf een klein beeldbestand uit tekstdata. Download het meegeleverde bestand patroon.txt en lees het in. Het is een rechthoekig raster met alleen . en #. Een punt wordt wit en een hekje zwart.

De asset heeft precies 16 regels van 16 tekens. Iedere rastercel wordt met de vaste schaalfactor 8 een blok van 8 bij 8 pixels. Het resultaat is dus 128 pixels breed en 128 pixels hoog en heet patroon.png.

Gebruik de bestaande png.py uit fraaie_plaatjes.zip van het werkcollege. Deze opgave bewerkt geen bestaand beeld: ze zet tekstdata om naar een nieuw beeldbestand.

Geldige invoer

Een geldig raster is niet leeg, heeft geen lege regels, is rechthoekig en bevat uitsluitend . en #. Schrijf eerst read_raster(filename) met with open om het raster te lezen en te controleren. Houd de schaalfactor 8 vast; maak die geen parameter en bied geen andere vergroting aan.

Wat je gaat maken

Schrijf functies die:

  1. read_raster(filename) met with open het tekstbestand leest en een lijst van regels teruggeeft;

  2. raster_to_pixels(raster) een lijst van RGB-pixels maakt;

  3. scale_pixels(pixels) met de vaste factor 8 ieder pixelblok vergroot;

  4. write_pattern_image(pixels) de pixels met save_rgb uit png.py opslaat als patroon.png.

Een pixel is een lijst [rood, groen, blauw]. Gebruik [255, 255, 255] voor wit en [0, 0, 0] voor zwart. Test je functies met assertions: controleer 16 rijen en 16 kolommen, de RGB-pixels, de vaste schaalfactor en de afmetingen van het uitvoerbeeld. Voer daarna je programma uit op assets/patroon.txt.

Controle

Voor de meegeleverde asset verwacht je 16 rijen, 16 kolommen en een uitvoer van 128 rijen met 128 pixels per rij. Open patroon.png om te controleren of de vorm overeenkomt met het tekstbestand. Een niet-rechthoekig raster of een ander teken moet met een assertion worden afgewezen.