In dieser Aufgabe entspricht jedes Byte einem Pixel. Die einzelnen Pixel sind zeilenweise von oben nach unten und in jeder Zeile von links nach rechts codiert. Lies alle Bytes hintereinander und setze den entsprechenden Pixel auf die jeweilge Farbe.
Die Palette für dieses Bild hat 12 Farben:
In dieser Aufgabe wurde das Bild nicht komprimiert, jedes Byte entspricht also genau einem Pixel.
Im Gegensatz zur Pixelflut kannst du hier Pixel nicht auf beliebige RGB-Farben setzen, sondern nur einfache, ganze Zahlen als Farben verwenden. Dafür gibt es in jeder Aufgabe eine vordefinierte Palette, die einer Handvoll Zahlen jeweils eine Farbe zuordnet.
Deine Aufgabe ist es, ein codiertes Bild zu decodieren. Die Art der Decodierung ist abhängig von der Aufgabenstellung, die du ganz oben findest (es geht einfach los und wird später schwieriger).
Die codierten Zahlen findest du im Parameter data
deiner run
-Methode. Für diese Variable stehen dir folgende Methoden zur Vefügung:
next() |
gibt das nächste Byte zurück |
length() |
gibt die Länge des Datenstroms in Bytes zurück |
eof() |
gibt an, ob wir am Ende des Datenstroms angelangt sind (eof = »end of file«) |
reset() |
springt zurück zum Anfang des Datenstroms |
read() |
liefert alle Bytes in einer Liste zurück |
Du kannst also, solange du nicht am Ende des Datenstroms angelangt bist, immer das nächste Byte mit Hilfe der next
-Methode lesen und dann dieses Byte untersuchen. Je nach Aufgabenstellung musst du nun aus jedem Byte ableiten, wie viele und welche Pixel du setzen musste. Am Ende soll ein fertiges Bild entstehen.
Um Pixel zu setzen, kannst du die folgende Methode verwenden:
set_pixel(x, y, c) |
Pixel an Position (x, y) auf Farbe c setzen |
from canvas import Canvas class Task(Canvas): def run(self, data, width, height): # Der folgende Code demonstriert, wie du Daten lesen # und Pixel setzen kannst. Du solltest ihn löschen, # wenn du diese Basics verstanden hast. print(f"Im Datenstrom befinden sich {data.length()} Bytes!") print(f"Die Zeichenfläche ist {width}x{height} Pixel groß.") # Wir setzen nun den Pixel links oben auf die Farbe 6 (grün) self.set_pixel(0, 0, 6)