Der folgende theoretische Teil meiner Einführung stammt von Stefan Müller.



PC-Grafiken und der Speicher


Der Speicher

Wer Grafiken mit dem PC bearbeitet wird schnell feststellen, daß es eigenartige Werte gibt, die immer wieder auftauchen. Da sind z.B. :

Farben :

Farbtiefen :

Nun, wenn ich aber ein kleines Bildchen male, dabei nur Schwarz, Weiß und Rot verwende, dann habe ich doch nur 3 Farben.

Wie so oft beim Computer, gibt es auch hier einen Unterschied zwischen dem, was logisch und dem, was physikalisch vorhanden ist. Ein Grund mit dafür, daß logisches Denken allein beim Computer nicht ausreicht. Was hier noch wissenswert ist, ist die physikalische Realisierung, kurz, das Thema Bits und Bytes. Dieses will ich hier nur soweit aufführen, wie es zum Verständnis für die Welt der Grafiken notwendig ist.

Ein Bit ist eigentlich ein elektronischer Schalter. Angenommen dieser Schalter steuert eine kleine Lampe, so leuchtet diese, wenn der Schalter geschlossen ist, und sie ist aus, wenn der Schalter geöffnet wird. Anstatt die Worte 'geschlossen' und 'geöffnet' oder 'an' und 'aus' zu verwenden, redet es sich leichter mit '1' und '0'. Um nun nicht zu viele Schalter zu haben, werden 8 davon zu einem Byte logisch zusammengefaßt. Warum es 8 sind, ist von fachinterner Raffinesse, und soll hier nicht weiter durchleuchtet werden.

Es genügt die Vorstellung, daß ein Byte 8 Taschenlampen entspricht, die nebeneinander liegen und wie folgt durchnummeriert werden:

Ein Hinweis : Dies ist der Grund, weshalb früher mal die Computer-Kommandos nichts anderes waren, als eine Reihe von Nullen und Einsen. Jede der Ziffern als Potenz von 2 mal 1 oder 0, je nachdem ob das Bit an oder aus ist.

Ein Computer-Speicher ist nichts anderes als mehrere Bytes.

Zur Erinnerung : die Größe eines Arbeitsspeichers wird in Bytes gemessen. Je mehr ein Speicher davon hat, desto besser, wie wir sehen werden.

Jedes dieser Bytes hat eine Adresse, über die auf das jeweilige Byte zugegriffen wird. Das ganze Computergeheimnis besteht nun darin, den Inhalt dieser Adressen zu verändern, hin und herzubewegen oder abzufragen. Diese Vorgänge werden als lesenaus und schreiben in den Speicher verstanden.

Der Inhalt der Adressen ist nichts anderes als die Angabe, welches der 8 Bits an oder aus ist. Das gezielte Ein- und Ausschalten oder Abfragen dieser Bits erfolgt über die sogenannte Maskierung der Bytes, dies hat was mit Binär-Arithmetik zu tun, was letztendlich genau der logische Teil des Computers ist, und hier nicht weiter erklärt werden muß.

Was hat das nun mit Grafiken zu tun ?

Ganz einfach, irgendwie müssen die Grafiken in Bytes übersetzt werden, wenn sie irgendwo im Speicher plaziert werden sollen, sei es nun in den Bildschirmspeicher, auf die Diskette, auf die Festplatte, in den Arbeitsspeicher oder gar auf den Weg durch die weite Welt des Internets.

Als Beispiel für die Speicherung einer Grafik ist die Speicherung der Gestalt eines Buchstabens geeignet. Sicher, in einer Text-Datei wird nur der Zeichen-Code gespeichert, aber um den dazugehörigen Buchstaben auf dem Bildschirm auszugeben, muß irgendwo gespeichert sein, wie dieser grafisch aussehen soll. In der DOS-Umgebung, die mit einer VGA-Karte unterstützt wird, werden dazu jeweils 8 Bytes benutzt, also 8x8=64 Bits. Die Bytes werden untereinander dargestellt, wie das Beispiel für 'A' zeigt :

Diese Bytes müssen irgendwo gespeichert sein, damit ich oder irgendjemand anderes ein 'A' sehen kann, wenn ein 'A' über Tastatur eingegeben wird. Ein Programm sorgt dafür, daß der Inhalt dieser 8 Bytes in den Bildschirmspeicher kopiert wird und dieses wiederum sorgt dafür, daß ein 'A' ausgegeben wird.

Eine sogenannte Pixel-Grafik ist also nichts anderes als ein Binäres Muster (Bitmap).

Wie können die Farben gespeichert werden ?

Binär, also an oder aus, erklärt eigentlich nur Schwarz/Weiß-Grafiken, sogenannte Monochrom-Bitmaps. Jedes Bit, das 1 ist, entspricht einem weißen Pixel und jedes, das 0 ist, entspricht einem schwarzen Pixel. Die Farbpunkte einer Grafik werden in Speicher-Bits übersetzt (Pixel).

Anstatt nun jeweils ein Bit pro Pixel für die Speicherung zu nehmen, können auch 2, 4, oder alle 8 Bits für ein Pixel gewählt werden. 3, 5, 6, 7 Bits macht deshalb keinen Sinn, weil ein Byte mit 8 Bits nicht in entsprechend gleichgroße Teile unterteilt werden kann. Beispielsweise bei 3 Bits pro Pixel gibt es das Problem, daß zum Schluß 2 Bits pro Pixel verwendet werden müßten.

Je nachdem, wieviel Bits für ein Pixel verwendet werden, können entsprechend viele Pixel mit einem Byte dargestellt werden :

Während bei einem Bit nur die verschiedenen Schaltzustände zu zwei Farben führen, sieht es bei zwei Bit schon anders aus. Die mögliche Farbanzahl ergibt sich durch die Gleichung :

Farben = 2ˆ( Bits pro Pixel )

Mit einem Tachenrechner läßt sich das leicht ausrechnen, aber was dabei herauskommt, sind schon bekannte Werte:

Die Anzahl der verwendeten Bits fällt auch mit der Bild-Tiefe zusammen. Bei dieser Form der Speicherung werden nicht die unmittelbar nebeneinander stehenden Bits zu einem Pixel zusammengefaßt, sondern es werden mehrere monochrome Bit-Muster komplett nacheinander gespeichert. Dies erklärt, warum es verschiedene Grafikformate gibt.

Es ist also ein Unterschied, ob im Bild selbst nur 3 Farben zu sehen sind, oder wieviel Farben es durch die Speicherung erhält. Ein solches Bild kann ohne Probleme mit über 16 Millionen ( mögliche ) Farben gespeichert werden, auch wenn nicht alle Farben verwendet werden. Die Grafik-Programme reduzieren die Farb-Tiefe nicht auf die möglichst kleinste, da der Computer-Maler sein Bild vielleicht später mal weitermalen möchte, und dann könnte die eine oder andere Farbe noch dazukommen.

Diese kleine Unterscheidung ist wichtig, um zu verstehen, warum eine gute Grafik-Karte manchmal trotzdem nur 16 Farben darstellen kann. Dann nämlich liegt es an der logischen Problematik und nicht an einer eventuellen physikalischen. Die Antwort ist nun einfach. Die Grafikumgebung wird mit einer 4Bit-Grafik unterstützt. Dies ist zum Beispiel generell in der MS-DOS-Umgebung der Fall.

Diese Farben müssen nun nicht unbedingt alle verschieden sein, sie haben nur alle ein anderes Bitmuster. Über die Binär-Arithmetik läßt sich der Wert der Farbe errechnen, der die Position, oder besser den Index dieser Farbe innerhalb einer Palette bestimmt. Diese zu berechnen ist für den, der Grafiken erstellen und eher über Grafik-Programme bearbeiten möchte, nicht notwendig. Nur bei der Erstellung transparenter Bilder könnte der Index relevant sein, wenn eine bestimmte Farbe transparent gesetzt werden sollte.

Die Wahl der Anzahl der Farben hängt entscheidend von der Großzügigkeit gegenüber dem Speicher ab oder von der Möglichkeit, die Grafik-Formate bieten. So läßt das im WWW allseits bekannte GIF-Format nur maximal 256 Farben zu. Es macht Sinn, die kleinste Farb-Anzahl zu wählen, da die Grafik-Datei dann auch so klein ist wie es geht. Eine 24Bit-Grafik braucht das 8-fache an Speicherplatz wie eine 16-Farben-Grafik, weil 8 mal so viele Bytes für die Pixel-Darstellung gebraucht werden. Je kleiner eine Grafik ist, desto schneller läßt sie sich laden, was im Internet begrüßt wird. Ein Stöhnen geht in der Internet-Gemeinde um, wenn sogenannte Mac-Grafiker unnötig große Photos in ihren Webseiten einbinden, die meist mehrere Millionen Farben haben.

Farbtöne und die Palette

Wie die einzelnen Pixel gespeichert werden, und was das für die allgemeine Grafik-Berarbeitung bedeutet, ist weitgehens geklärt. Nicht geklärt ist, wie der Farb-Ton eines Pixels gespeichert wird.

Mit der Grafik wird eine Palette gespeichert, die jedem Pixel-, bzw Farb-Wert einen Farbton zuordnet. Wird keine Palette abgespeichert, dann werden die Farbtöne standardmäßig verteilt. So gibt es z.B. die 16 Windows-Standard-Farben. Eine Palette läßt sich am besten wie eine Tabelle vorstellen. Jedem Bit-Muster das einem Pixel zugeordnet wird, werden weitere Bytes für den Farbton zugeordnet, denn irgendwie muß ja auch dieser gespeichert werden.

Die klassische Farbton-Mischung sind die sogenannte RGB-Farben. Hier werden die Farbtöne in drei Bytes gespeichert. Die Buchstaben R G B können im deutschsprachigen Raum direkt mit Rot, Grün und Blau übersetzt werden.

Jeder dieser Grundfarben hat einen Intensitätswert von 0 bis 255. Je nachdem welche Werte in diesen Bytes gespeichert werden, kommt Gelb, Weiss oder Violett heraus.

In dem HTML-Tag

	< FONT COLOR=#c0c0c0 >

taucht beispielsweise eine Angabe über den Farb-Ton auf. Dieses eigenartige "#c0c0c0" steht für Hellgrau. Das "#" besagt, daß die folgende Zeichenfolge eine Zahl mit der Basis 16 ist, also eine Hexadezimalzahl. Diese Ziffernfolge ist typischer weise 6-stellig. Das erste Ziffernpaar "c0" steht für Rot, das zweite für Grün und das letzte für Blau. Wie sich dies nun genau berechnen oder erklären läßt, kann hier nachgesehen werden, und hat wieder was mit Bits und Bytes zu tun. Zu sagen ist hier noch, daß es noch andere Farbmischungen als RGB gibt. Das liefert auch den Grund für den Fehlfarben-Effekt bei einigen Bildern.

Die Auswirkungen auf die Datei-Größe

Dieses Thema ist nur deshalb interessant, weil viele Grafiken unnötig viel Speicher bedürfen und lange Ladezeiten haben.

Angenommen die Grafik beeinhaltet eine einfache Zeichnung, Schwarz auf Weiss, und die Pixelgröße der Grafik sei für diese Überlegung 40 x 60, also insgesammt 2400 Bits.

Wird der x-Wert durch 8 geteilt, so sind es 5 x 60, also 300 Bytes. Dies würde ausreichen, um das Schwarz/Weiss-Bitmuster zu speichern. Ist die Farbtiefe aber nicht 1, also monochrom, sondern 2, 4, oder gar 8 sieht das schon anders aus :

   Farbtiefe =  1, min.  300 Bytes
   Farbtiefe =  2, min.  600 Bytes
   Farbtiefe =  4, min. 1200 Bytes
   Farbtiefe =  8, min. 2400 Bytes
   Farbtiefe = 16, min. 4800 Bytes
   Farbtiefe = 24, min. 7200 Bytes
   Farbtiefe = 32, min. 9600 Bytes

Es macht also Sinn, die Farb-Tiefe möglichst nicht übertrieben zu wählen.

Fast alle Grafik-Programme erlauben eine Reduzierung der Farbtöne, um dieses Problem zu lösen.

Zum Schluß dieser kleinen Hintergrund-Beleuchtung

Dies alles muß niemand verstehen, der einfach nur Bilder mit dem Computer erstellen und bearbeiten will. Es reicht völlig aus, es wenigstens mal gehört zu haben, und zu wissen, daß was auch immer problematisch am PC sein sollte, irgendwie mit Bits und Bytes zusammhängt.

Wer allerdings komplizierte Grafik-Programme selbst programmieren will, oder sich Dokumentationen zu Grafik-Formaten durchliest, der braucht natürlich ein wenig mehr Licht an dieser Stelle.