Eine Möglichkeit, wie Computer Bilder speichern und übertragen können funktioniert folgendermassen: Über das Bild wird ein rechteckiges Raster gelegt und danach wird für jedes Teilquadrat festgehalten, welche Farbe in diesem Teil des Bildes vorherrscht. In der codierten Nachricht wird jedes Teilquadrat als ein farbiger Punkt, genannt Pixel repräsentiert. Darum heissen so codierte Bilder auch Rastergrafiken oder Pixelgrafiken (siehe Wikipedia). Als Beispiel das Bild des Roboters bit mit verschiedenen Rastergrössen:
Für die Codierung der Farben wird wie bei allen Codierungen eine Codetabelle benötigt. Sie weist allen Farben einen Binärcode zu. Die entsprechende Codetabelle im Mobiltelefon der drei Roboter ist nicht sehr gross, denn das Mobiltelefon der Roboter kann nur Bilder mit höchstens acht Farben darstellen:
weiss | 0000 |
schwarz | 0001 |
rot | 0010 |
grün | 0011 |
gelb | 0100 |
braun | 0101 |
orange | 0110 |
blau | 0111 |
Somit entsprechen jeweils vier bits der codierten Nachricht einem Pixel im decodierten Bild.
Das Codieren von Bildern kann recht viel Platz erfordern, wenn das Raster sehr gross ist und somit viele Pixel codiert werden müssen. Hier wäre es ganz praktisch, wenn sich das Bild komprimieren liesse. Das Kompressionsverfahren des Mobiltelefons der drei Roboter macht sich die Eigenschaft vieler Bilder zu Nutze, dass sie oft grosse, gleichfarbige Bereiche erhalten. Das Codieren solcher Bereiche ist relativ eintönig: Ein gleichfarbiges Pixel folgt auf das nächste. Müssten Menschen sich ein solches Bild übermitteln, so würden sie nicht stur sagen "grün, grün, grün, grün..." sondern sie würden das vermutlich abkürzen mit "jetzt kommen 5 grüne Pixel, dann 20 gelbe, danach... ".
Diesen Trick beherrscht auch das Mobiltelefon der drei Roboter. Folgen in einem Bild mehrere gleichfarbige Pixel aufeinander, so kann dies entsprechend codiert werden. Zusätzlich zu den 8 Farbwerten gibt es in der Codetabelle auch 8 Wiederholungsanweisungen:
weiss | 0000 | 2 Pixel | 1000 |
schwarz | 0001 | 3 Pixel | 1001 |
rot | 0010 | 4 Pixel | 1010 |
grün | 0010 | 5 Pixel | 1011 |
gelb | 0100 | 6 Pixel | 1100 |
braun | 0101 | 7 Pixel | 1101 |
orange | 0110 | 8 Pixel | 1110 |
blau | 0111 | 9 Pixel | 1111 |
Acht gelbe Pixel können somit folgendermassen platzsparend codiert werden:
1110 | 0100 |
Im Folgenden wird an einem Beispiel schrittweise gezeigt, wie komprimierte Bilder decodiert werden können. Das komprimierte Bild sieht so aus:
111000101001001010000000100100101001001010000000100100 100010110000000010001011000000001010010010100000001001 001010010010100000001001001011100010 |
Da das Bild komprimiert vorliegt, ist nicht auf den ersten Blick erkennbar, wie gross das Bild ist. In einem ersten Schritt muss die Nachricht daher dekomprimiert werden:
1110 | 0010 | 8 Pixel rot |
1001 | 0010 | 3 Pixel rot |
1000 | 0000 | 2 Pixel weiss |
1001 | 0010 | 3 Pixel rot |
1001 | 0010 | 3 Pixel rot |
1000 | 0000 | 2 Pixel weiss |
1001 | 0010 | 3 Pixel rot |
0010 | 1 Pixel rot | |
1100 | 0000 | 6 Pixel weiss |
0010 | 1 Pixel rot | |
0010 | 1 Pixel rot | |
1100 | 0000 | 6 Pixel weiss |
0010 | 1 Pixel rot | |
1001 | 0010 | 3 Pixel rot |
1000 | 0000 | 2 Pixel weiss |
1001 | 0010 | 3 Pixel rot |
1001 | 0010 | 3 Pixel rot |
1000 | 0000 | 2 Pixel weiss |
1001 | 0010 | 3 Pixel rot |
1110 | 0010 | 8 Pixel rot |
Das Bild besteht also aus 64 Pixeln. Da es quadratisch sein muss, das Bild nun in einem Raster von 8x8 Pixeln aufgezeichnet werden:
Weiter zur Musik-Decodierung...
Hast du schon eine Lösung gefunden, dann kannst du sie hier überprüfen: