Indizierte Farbe

In der Computertechnik ist indizierte Farbe eine Technik, um die Farben von digitalen Bildern in einer begrenzten Weise zu verwalten, um Computerspeicher und Dateispeicher zu sparen, während Anzeigewiederauffrischung und Dateiübertragungen beschleunigt werden. Es ist eine Form der Vektorquantisierungskompression.

Wenn ein Bild auf diese Weise codiert wird, werden Farbinformationen nicht direkt von den Bildpixeldaten übertragen, sondern in einem separaten Datenelement gespeichert, das als Palette bezeichnet wird: ein Array von Farbelementen. Jedes Element im Array repräsentiert eine Farbe, die durch ihre Position innerhalb des Arrays indiziert wird. Die einzelnen Einträge werden manchmal als Farbregister bezeichnet. Die Bildpixel enthalten nicht die vollständige Spezifikation ihrer Farbe, sondern nur ihren Index in der Palette. Diese Technik wird manchmal als Pseudofarbe oder indirekte Farbe bezeichnet, da Farben indirekt angesprochen werden.

Vielleicht war das erste Gerät, das Palettenfarben unterstützte, ein Random-Access Frame Buffer, der 1975 von Kajiya, Sutherland und Cheadle beschrieben wurde. Dies unterstützte eine Palette von 256 36-Bit-RGB-Farben.

Palettengröße
Die Palette selbst speichert eine begrenzte Anzahl unterschiedlicher Farben; 4, 16 oder 256 sind die häufigsten Fälle. Diese Grenzen werden oft von der Hardware des Anzeigeadapters der Zielarchitektur vorgegeben, so dass es kein Zufall ist, dass diese Zahlen die genauen Zweierpotenzen sind (der Binärcode): 22 = 4, 24 = 16 und 28 = 256. Während 256 Werte sein können in ein einziges 8-Bit-Byte passen (und dann belegt ein einzelnes indiziertes Farbpixel auch ein einzelnes Byte), können Pixelindizes mit 16 (4-Bit, ein Nibble) oder weniger Farben zu einem einzigen Byte gepackt werden (zwei Nibbles pro Byte, wenn 16 Farben verwendet werden, oder vier 2-Bit-Pixel pro Byte, wenn 4 Farben verwendet werden). Manchmal können 1-Bit-Werte (zwei Farben) verwendet werden, und dann können bis zu acht Pixel in ein einzelnes Byte gepackt werden. Solche Bilder werden als Binärbilder (manchmal als Bitmap- oder Bilevel-Bild bezeichnet) und nicht als indizierte Farbbilder betrachtet.

Wenn eine einfache Videoüberlagerung durch eine transparente Farbe beabsichtigt ist, ist ein Paletteneintrag speziell für diesen Zweck reserviert und wird als verfügbare Farbe abgewertet. Einige Maschinen, wie die MSX-Serie, hatten die transparente Farbe, die von der Hardware reserviert wurde.

Indizierte Farbbilder mit Palettengrößen jenseits von 256 Einträgen sind selten. Das praktische Limit liegt bei 12 Bit pro Pixel, 4.096 verschiedene Indizes. Indizierte 16 bpp oder mehr zu verwenden, bietet nicht die Vorteile der Natur der indizierten Farbbilder, da die Größe der Farbpalette in Bytes größer ist als die Rohbilddaten selbst. Außerdem können nützliche direkte RGB-Highcolor-Modi ab 15 bpp und höher verwendet werden.

Wenn ein Bild viele subtile Farbtöne hat, ist es notwendig, ein begrenztes Repertoire von Farben auszuwählen, um das Bild unter Verwendung der Farbquantisierung anzunähern. Solch eine Palette reicht häufig nicht aus, um das Bild genau darzustellen; schwer reproduzierbare Merkmale wie Farbverläufe erscheinen blockartig oder streifenförmig (Farbstreifen). In diesen Fällen ist es üblich, ein Dithering zu verwenden, das verschiedenfarbige Pixel in Mustern mischt, wobei die Tendenz des menschlichen Sehens dazu ausgenutzt wird, benachbarte Pixel zusammen zu verwischen, wodurch ein Ergebnis erhalten wird, das dem ursprünglichen optisch näher kommt.

Farben und Paletten
Wie die Farben innerhalb der Farbpalettenabbildung eines bestimmten indizierten Farbbildes codiert werden, hängt von der Zielplattform ab.

Frühe Farbtechniken
Viele frühe Privat- und Heimcomputer hatten sehr begrenzte Hardwarepaletten, die einen sehr kleinen Satz von Farben erzeugen konnten. In diesen Fällen wird der Wert jedes Pixels direkt auf eine dieser Farben abgebildet. Bekannte Beispiele sind Apple II, Commodore 64 und IBM PC CGA, die alle Hardware enthalten, die einen festen Satz von 16 Farben erzeugen kann. In diesen Fällen kann ein Bild jedes Pixel mit 4 Bits codieren und direkt die zu verwendende Farbe auswählen. In den meisten Fällen unterstützt die Display-Hardware jedoch zusätzliche Modi, bei denen nur ein Teil dieser Farben in einem einzigen Bild verwendet werden kann. Dies ist eine nützliche Technik zum Speichern von Speicher. Zum Beispiel könnte der 320 × 200-Auflösungsmodus des CGA nur vier der 16 Farben gleichzeitig anzeigen. Da die Paletten vollständig proprietär sind, kann ein auf einer Plattform erzeugtes Bild auf einem anderen nicht direkt richtig angezeigt werden.

Andere Maschinen dieser Ära hatten die Fähigkeit, eine größere Anzahl von Farben zu erzeugen, erlaubten aber im Allgemeinen nur eine Teilmenge davon in einem Bild. Beispiele sind die 256-Farben-Palette auf Atari 8-Bit-Maschinen oder die 4.096 Farben des VT241-Terminals im ReGIS-Grafikmodus. In diesen Fällen war es üblich, dass das Bild nur eine kleine Teilmenge der gesamten Anzahl von Farben gleichzeitig anzeigt, bis zu 16 gleichzeitig auf Atari und VT241. Im Allgemeinen arbeiteten diese Systeme identisch mit ihren weniger farbenfrohen Brüdern, aber ein Hauptunterschied war, dass es zu viele Farben in der Palette gab, um die Pixeldaten aufgrund der begrenzten Menge an Videospeicher direkt zu kodieren. Stattdessen verwendeten sie eine Farb-Nachschlagetabelle (CLUT), bei der die Daten jedes Pixels auf einen Eintrag in der CLUT zeigten und die CLUT unter Programmsteuerung eingerichtet wurde. Dies bedeutete, dass die Bild-CLUT-Daten zusammen mit den Rohbilddaten gespeichert werden mussten, um das Bild korrekt reproduzieren zu können.

RGB
Hardware-Paletten, die auf Component-Video-Farben wie YPbPr oder dergleichen basieren, wurden Mitte der 1980er Jahre allgemein durch das flexiblere RGB-Farbmodell ersetzt, in dem eine bestimmte Farbe durch Mischen unterschiedlicher Mengen der drei Grundfarben Rot, Grün und Grün erhalten werden kann Blau. Obwohl die Gesamtzahl der verschiedenen Farben von der Anzahl der Ebenen pro Primärseite und von einer bestimmten Hardwareimplementierung abhängt (ein 9-Bit-RGB stellt 512 Kombinationen, ein 12-Bit-RGB 4.096 usw. bereit), wird in diesem Modell To-Analog Converters (DAC) können die Farben erzeugen, was das Hardware-Design vereinfacht, während die Software die Anzahl der verwendeten Ebenen abstrakt behandeln und die RGB-Farben geräteunabhängig verwalten kann. Mit Farben, die im RGB-Format innerhalb der Paletten von indizierten Bilddateien gespeichert sind, kann jedes Bild (durch geeignete Transformationen) auf einem solchen System angezeigt werden, unabhängig von der Farbtiefe, die in der Hardware-Implementierung verwendet wird.

Heutzutage verwalten Anzeige-Hardware und Bilddateiformate, die sich mit indizierten Farbbildern befassen, fast ausschließlich Farben im RGB-Format, wobei die de-facto-Standardcodierung die sogenannte TrueColor oder 24-Bit-RGB mit 16.777.216 verschiedenen möglichen Farben ist. Indizierte Farbbilder sind jedoch nicht wirklich auf eine 24-Bit-RGB-Farbcodierung beschränkt; Bildpaletten können jede Art von Farbkodierung enthalten. Das PDF-Dateiformat unterstützt beispielsweise indizierte Farben in anderen Farbräumen, insbesondere CMYK, und Adobe Distiller konvertiert Bilder standardmäßig in indizierte Farben, wenn die Gesamtzahl der Farben in einem Bild kleiner oder gleich 256 ist. Die TIFF- und PNG-Dateiformate können die RGB-Triplets optional mit einer Genauigkeit von 16 Bit (65.536 Ebenen pro Komponente) speichern, was insgesamt 48 Bit pro Pixel ergibt. Eine vorgeschlagene Erweiterung des TIFF-Standards erlaubt Nicht-RGB-Farbpaletten, die jedoch aus technischen Gründen nie in Software implementiert wurden. Die Farbabbildungstabelle des BMP-Dateiformats indiziert Farbmodus speichert seine Einträge in BGR-Reihenfolge statt RGB und hat (in der aktuellen Version) ein zusätzliches unbenutztes Byte zum Füllen, um 32-Bit-Wortausrichtung während der Verarbeitung zu entsprechen, aber es ist im Wesentlichen immer noch eine 24-Bit-RGB-Farbkodierung. (Eine frühere Version des BMP-Formats verwendete drei Bytes pro 24-Bit-Farbzuordnungstabelleneintrag, und viele Dateien in diesem Format sind immer noch im Umlauf, so dass viele moderne Programme, die BMP-Dateien lesen, beide Varianten unterstützen.)

Pixel-Bit-Anordnungen
Mit Ausnahme von Grafikmodi mit sehr niedriger Auflösung haben frühe Heim- und Personalcomputer selten ein “All-Pixel-adressierbares” Design implementiert – dh die Fähigkeit, ein einzelnes Pixel unabhängig von den verfügbaren Farben zu ändern. Ihre Einschränkungen kamen von der Verwendung separater Farbattribut- oder Farb-RAM-Bereiche, was zu Attribut-Kollisionseffekten führte. Außerdem waren die Bildpunktbits und / oder die Abtastzeilen des Videospeichers üblicherweise auf für die Videogenerator-Hardware geeigneten ungeraden Wegen angeordnet (wodurch Hardwarekosten in einem kostenintensiven Markt eingespart werden), aber manchmal schaffen sie Schwierigkeiten für die Leute, die Grafikprogramme schreiben . Die Pixel eines Bits in Bildern mit indizierten Farben, die nur mit einem Pixel adressierbar sind, sind im Videospeicher oder in den Bilddateien nicht immer zusammenhängend (dh, es wird nicht immer eine grobe Organisation verwendet.) Einige Videohardware, beispielsweise die 16-Farben-Grafikmodi des Enhanced Grafikadapter (EGA) und Videografikarray (VGA) für IBM PC-kompatible Geräte oder den Amiga-Videopuffer sind als eine Reihe von Bitebenen (in einer als planar bezeichneten Konfiguration) angeordnet, in denen die zugehörigen Bits eines einzelnen Pixels auf mehrere aufgeteilt sind unabhängige Bitmaps. Somit sind die Pixel-Bits konzeptionell entlang der 3D-Z-Achse ausgerichtet. (Das “Tiefen” -Konzept ist hier nicht dasselbe wie das der Pixeltiefe.)

Frühe Bilddateiformate, wie etwa PIC, speicherten wenig mehr als einen bloßen Speicherauszug des Videopuffers einer gegebenen Maschine.

Einige indizierte Farb-Bilddateiformate, wie z. B. Graphics Interchange Format (GIF), ermöglichen die Anordnung der Scanzeilen in verschachtelter Weise (nicht lineare Reihenfolge), wodurch eine Version mit niedriger Auflösung auf dem Bildschirm angezeigt wird, während sie noch heruntergeladen wird , so dass der Computerbenutzer eine Vorstellung von seinem Inhalt während der Sekunden erhalten kann, bevor das ganze Bild ankommt.

Wie hier zu sehen ist, wurde das Bild in vier Gruppen von Linien unterteilt: Gruppe A enthält jede vierte Zeile, Gruppe B enthält Zeilen unmittelbar nach denen in Gruppe A, Gruppe C enthält ebenfalls die Zeilen unmittelbar nach denen in Gruppe B und Gruppe D enthält die übrigen Zeilen, die sich zwischen den Zeilen der Gruppe C (unmittelbar darüber) und den Zeilen der Gruppe A (unmittelbar darunter) befinden. Diese werden in der Reihenfolge A, C, B, D in der Datei gespeichert, so dass bei der Übertragung der Datei die zweite empfangene Gruppe (C) von Linien zwischen den Zeilen der ersten Gruppe zentriert ist, wobei sie am meisten räumlich einheitlich und erkennbar ist Bild möglich, bestehend aus nur zwei der Liniengruppen. Die gleiche Technik kann mit mehr Gruppen (z. B. acht) angewendet werden, in welchem ​​Fall die nächste zu sendende Gruppe Linien enthält, die bei oder nahe den Zentren von verbleibenden Bändern liegen, die noch nicht mit Bilddaten gefüllt sind. Diese Methode mit vier oder acht Liniengruppen wurde in der zweiten Hälfte der 90er Jahre häufig im frühen World Wide Web verwendet. Anstatt den Hintergrund (schwarz) wie in der Abbildung oben zu belassen, wurde das Teilbild oft auf dem Bildschirm dargestellt, indem jede Zeile dupliziert wurde, um den darunter liegenden Raum bis zur nächsten empfangenen Bildzeile zu füllen. Das Endergebnis war ein kontinuierliches Bild mit verringerter vertikaler Auflösung, das über einige Sekunden auf die volle Auflösung anwachsen würde, wenn die späteren Teile der Bilddaten eintrafen.

Vorteile
Die indizierte Farbe spart viel Speicher, Speicherplatz und Übertragungszeit: Mit TrueColor benötigt jedes Pixel 24 Bits oder 3 Bytes. Ein typisches unkomprimiertes TrueColor-Bild mit 640 × 480 VGA-Auflösung benötigt 640 × 480 × 3 = 921.600 Bytes (900 KiB). Wenn die Bildfarben auf 256 begrenzt werden, benötigt jedes Pixel nur 8 Bits oder 1 Byte, so dass das Beispielbild jetzt nur 640 × 480 × 1 = 307.200 Bytes (300 KiB) plus 256 × 3 = 768 zusätzliche Bytes zum Speichern des Pixels benötigt Palette Karte in sich (unter der Annahme von RGB), etwa ein Drittel der ursprünglichen Größe. Kleinere Paletten (4-Bit 16 Farben, 2-Bit 4 Farben) können die Pixel sogar noch mehr (zu einem Sechstel oder einem Zwölftel) packen, offensichtlich auf Kosten der Farbgenauigkeit.

Indizierte Farben wurden häufig in frühen Personalcomputern und Hardware von Anzeigeadaptern verwendet, um Kosten zu reduzieren (hauptsächlich durch das Erfordernis weniger der dann teuren RAM-Chips), aber auch für eine bequeme Bildverwaltung mit CPUs mit begrenzter Leistung (in der Größenordnung von 4 bis 8 MHz) ), Dateispeicher (Kassetten und Disketten mit niedriger Dichte). Bemerkenswerte Computergraphiksysteme, die in den 1980er Jahren ausgiebig (oder sogar ausschließlich) Pseudofarbpaletten verwenden, umfassen CGA, EGA und VGA (für IBM PC-kompatible), Atari ST und Amigas OCS und AGA.

Bilddateien, die in den frühen 1990ern über das Compuserve-Netz ausgetauscht wurden, wurden im GIF-Format gekapselt. Später verwendeten die HTML-Webseiten das GIF zusammen mit anderen indizierten farbunterstützenden Dateiformaten wie PNG, um Bilder in begrenzter Farbe schnell auszutauschen und in begrenztem Speicherplatz zu speichern.

Die meisten Bilddateiformate, die indizierte Farbbilder unterstützen, unterstützen häufig auch ein gewisses Komprimierungsschema, wodurch ihre Fähigkeit verbessert wird, die Bilder in kleineren Dateien zu speichern.

Interessante kolorierte und künstlerische Effekte können leicht erreicht werden, indem die Farbpalette von indizierten Farbbildern verändert wird, um beispielsweise kolorierte Sepiatonbilder zu erzeugen. Aufgrund der separaten Natur des zugeordneten Palettenelements der indizierten Farbbilder sind sie ideal, um Graustufenbilder durch die Verwendung von Falschfarbenpaletten in Falschfarbenbilder umzuwandeln.

Einfache Videoüberlagerung kann durch die transparente Farbtechnik leicht erreicht werden.

Durch Manipulieren der Farbhardwareregister (Farbnachschlagetabelle oder CLUT) des Anzeigeadapters in den indizierten Farbgraphiemodi können Vollbild-Farbanimationseffekte erzielt werden, ohne das Bild neu zu zeichnen – das heißt, bei geringen CPU-Zeitkosten; Eine einzige Änderung der Registerwerte wirkt sich auf den gesamten Bildschirm aus. Die Farbkartenanimation, auch als Farbzyklus bezeichnet, wird in der Demoszene häufig verwendet. Der Microsoft Windows-Startlogo-Bildschirm in Windows 95, 98, ME und 2000 Professional (der VGA 320x200x256 Farbanzeigemodus verwendet, da dies der größte gemeinsame Nenner auf allen PCs ist) verwendet diese Technik für den Scrolling-Farbbalken am unteren Bildschirmrand ; Das Bild ist ein statisches Bild, bei dem nach der ersten Anzeige keine Pixel neu geschrieben werden. Benutzerdefinierte Boot-Bildschirm-Bilder könnten auf die gecycelten Farben tippen, um andere Teile der Bilder zu animieren.

Nachteile
Der Hauptnachteil der Verwendung indizierter Farben ist der begrenzte Satz gleichzeitiger Farben pro Bild. Kleine 4- oder 16-Farben-Paletten sind immer noch für kleine Bilder (Icons) oder sehr einfache Grafiken akzeptabel, aber um echte Bilder zu reproduzieren, werden sie fast nutzlos. Einige Techniken, wie beispielsweise Farbquantisierung, Anti-Aliasing und Dithering, können zusammen indizierte 256-Farben-Bilder erzeugen, die mit dem Original vergleichbar sind, bis zu einem akzeptablen Niveau.

Indizierte Farbbilder hängen stark von ihren eigenen Farbpaletten ab. Mit Ausnahme einiger weniger bekannter Paletten mit festen Farben (wie die des Color Graphics Adapter-CGA) können Rohbilddaten und / oder Farbzuordnungstabellen zwischen verschiedenen Bilddateien ohne irgendeine Art von Zwischenabbildung nicht zuverlässig ausgetauscht werden. Wenn die ursprüngliche Farbpalette für ein bestimmtes indiziertes Bild verloren geht, kann es fast unmöglich sein, sie wiederherzustellen. Hier ist ein Beispiel dafür, was passiert, wenn ein indiziertes Farbbild (der vorherige Papagei) mit einer falschen Farbpalette verknüpft wurde:

Indizierte Farbgrafikmodi für Grafikkarten haben die 16- oder 256-Farben-Grenze, die von der Hardware vorgegeben wird. Indizierte Farbbilder mit satten, aber inkompatiblen Paletten können nur genau nacheinander angezeigt werden, wie in einer Diashow. Wenn es notwendig ist, mehrere Bilder zusammen zu zeigen, wie in einem Mosaik von Miniaturbildern, wird häufig eine gemeinsame oder Hauptpalette verwendet, die so viele verschiedene Farbtöne wie möglich in einen einzigen Satz umfasst, wodurch die insgesamt genaue Farbverfügbarkeit begrenzt wird.

Das folgende Bild ist ein Mosaik aus vier verschiedenen indizierten Farbbildern, die mit einer einzigen gemeinsamen Master-Palette von 6-8-5 Ebenen RGB plus 16 zusätzlichen Graustufen gerendert wurden. Beachten Sie den begrenzten Farbbereich, der für jedes Bild verwendet wird, und wie viele Paletteneinträge nicht verwendet werden.

Indiziert Color Sample Mosaic erreicht die 24-Bit-Grenze für die gesamte RGB-Palette nicht. Zum Beispiel bietet der VGA für IBM PC-kompatible Computer nur eine 18-Bit-RGB-Palette mit 262.144 verschiedenen möglichen Farben in den Grafikmodi 16 und 256.
Einige Bildbearbeitungssoftware ermöglicht die Anwendung der Gammakorrektur auf eine Palette für indizierte Farbbilddateien. Im Allgemeinen ist es eine schlechte Übung, eine Gammakorrektur direkt auf die Farbkarte anzuwenden, da die ursprünglichen RGB-Farbwerte verloren gehen. Es ist besser, die Gammakorrektur mit der Anzeigehardware anzuwenden (die meisten modernen Anzeigeadapter unterstützen diese Funktion) oder als aktiven Zwischenschritt der Wiedergabesoftware durch Farbmanagement, bei dem die ursprünglichen Farbwerte beibehalten werden. Nur wenn die indizierten Farbbilder für Systeme gedacht sind, die keine Farbkalibrierung aufweisen und nicht plattformübergreifend sein sollen, kann die Gammakorrektur auf die Farbtabelle selbst angewendet werden.