Hold-And-Modify Modus
aus Wikipedia, der freien Enzyklopädie
HAM (Hold-And-Modify) ist ein Anzeigemodus der Grafik-Chipsätze der Amiga-Plattform, um 12-Bit- und 18-Bit-Bilder mit nur 6 bzw. 8 Bits pro Pixel anzuzeigen. Dabei wird eine spezielle Hardware-implementierte Datenkompression verwendet, um Speicherbandbreite zu sparen.
Falls in einer IFF-Bilddatei ein CAMG-Chunk vorhanden ist, kann dieser Modus am 11. Bit identifiziert werden.
Beim HAM-Modus werden zwei Varianten unterschieden.
- HAM- oder HAM6-Bilder können 4096 Farben darstellen und benutzen dafür 6 Bit pro Pixel und eine Palette von 16 Farben.
- Der 8-Bit-HAM8-Modus wurde mit dem Amiga 4000 und dem Amiga 1200 eingeführt und bietet mit nur 8 Bit pro Pixel und einer Basispalette von 64 Farben eine sehr gute fotoähnliche Bildqualität. In diesem Modus können fast so viele Farben aus dem 24-Bit-Spektrum dargestellt werden, wie in das Chip-RAM passen (minus die erste Pixelspalte), und was die Bildauflösung ermöglicht.
Die Farbe eines Pixels im HAM-Modus kann jede Farbe der Farbpalette sein, der 12-Bit-Palette bei HAM6 bzw. der 24-Bit-Palette bei HAM8. Oder die Farbe des direkt links daneben liegenden Pixels wird übernommen, wobei eine der drei Farbkomponenten (Rot, Grün, Blau) auf einen neuen Wert gesetzt wird. An der linken Bildseite wird die Randfarbe übernommen (Farbindex 0 der Farbpalette. Anm.: Die Videohardware beginnt damit nicht beim ersten Pixel einer Plane, sondern erst beim ersten sichtbaren Pixel (Stichwort DIsplayWindowStaRT register $dff08e), was bei Hardwarescrolling (virtual bzw. übergroßer Screen) einen (unschönen) Unterschied macht).
Dieses Verfahren harmoniert mit den Eigenschaften von Videosignalen (FBAS), so dass die verlustbehaftete Datenkompression nicht zu Qualitätsminderung führt.
In HAM-Bilddateien sind die Pixeldaten im BODY-Chunk als Code gespeichert, welcher in den Modus und die restlichen Bits aufgeteilt wird. Die Kodierung der Pixel entspricht dem von der Videohardware verwendeten Format.
Modus | Bedeutung |
---|---|
00 | Index in der Farbpalette |
01 | Änderung der Blaukomponente |
10 | Änderung der Rotkomponente |
11 | Änderung der Grünkomponente |
Sofern ein Pixel nicht eine Farbe der Palette darstellt (Modus 00), kann nur der neue Wert eines der drei RGB-Werte angegeben werden. Die anderen beiden Werte sind die gleichen wie im Pixel zuvor. Wenn der Pixel der erste einer Bildzeile ist, wird der vorherige Pixel als RGB(0,0,0) angenommen (anders als von der Videohardware s. o.).
Format von Modus und Datenbits eines Pixels im HAM6-Modus:
543210 00wxyz - Farbindex wxyz in eine 16 Einträge lange Basisfarbenpalette 01wxyz - Behalte den Farbwert des vorherigen Pixels, aber setze die (obersten) 4 Bit von Blau auf wxyz 10wxyz - Behalte den Farbwert des vorherigen Pixels, aber setze die (obersten) 4 Bit von Rot auf wxyz 11wxyz - Behalte den Farbwert des vorherigen Pixels, aber setze die (obersten) 4 Bit von Grün auf wxyz
Ein HAM-Bild kann nicht direkt in ein Bild mit 256 oder weniger Farben dekodiert werden, ohne vorher eine Reduktion der Farben durchzuführen. Um die volle Qualität zu erhalten, benötigt man mindestens ein 12-Bit-Bild.
Will man ein Bild, das in 256 oder mehr Farben vorliegt, in ein HAM-Bild konvertieren, sucht man zunächst die für dieses Bild optimale Basispalette, mit der schon möglichst viele Punkte des Bildes direkt oder nur mit geringen Abweichungen dargestellt werden können. Wenn die Basispalette festliegt, geht man zeilenweise durch das Bild und optimiert für jedes Pixel, ob es am besten durch eine der Basispalettenfarben dargestellt werden kann oder noch besser durch eine HAM-Modifikation des vorangehenden Pixels (3 Möglichkeiten: eine der 3 Farbkomponenten auf den gewünschten, wahren Wert setzen). Die Bewertung erfolgt dabei durch Abstandsbildung (im 3D-Farbraum) zwischen dem Bild-Pixel und dem jeweiligen Basis- oder HAM-Kandidaten. Dies gilt so allgemein sowohl für HAM6 als auch für HAM8.
Die Anzahl der Datenbits ist 4 für Standard-HAM6 und 6 für HAM8. Die Anzahl der Bitplanes im BMHD-Chunk ist 6 bzw. 8. Wenn ein HAM-Bild als 24-Bit-Bild angezeigt werden soll, sollten die Datenbits (4 bzw. 6) auf 8 Bit erweitert werden. Der Maximalwert sollte, bei 8 Bit pro RGB-Kanal, zu 255 umgewandelt werden.
Format von Modus und Datenbits eines Pixels im HAM8-Modus:
76543210 00uvwxyz - Farbindex uvwxyz in eine 64 Einträge lange Basisfarbenpalette 01uvwxyz - Behalte den Farbwert des vorherigen Pixels, aber setze die obersten 6 Bit von Blau auf uvwxyz 10uvwxyz - Behalte den Farbwert des vorherigen Pixels, aber setze die obersten 6 Bit von Rot auf uvwxyz 11uvwxyz - Behalte den Farbwert des vorherigen Pixels, aber setze die obersten 6 Bit von Grün auf uvwxyz
HAM8-Bilder müssen in 24-Bit-Bilder umgewandelt werden, um auf Nicht-Amiga-Systemen die volle Bildqualität beizubehalten.
Um im HAM8-Modus wirklich alle Farben der 24-Bit-Palette darstellen zu können, muss man die 64 Farben der Basispalette so vorbelegen, dass die 64 Kombinationsmöglichkeiten der untersten 2 Bit aller Farbkomponenten genau abgedeckt werden. Dann kann man mittels des HAM-Mechanismus von diesen Basisfarben aus alle Farben der 24-Bit-Palette erreichen. Begrenzt wird die gleichzeitig darstellbare Zahl von Farben nur durch die Größe des Chip-RAMs. Letztere beträgt 2 MB, so dass man auf einem HAM8-Bild ca. 2 Millionen verschiedene Farben darstellen kann. (Vom Chip-RAM gehen diverse andere Beträge ab, für die Workbench und diverse Datenstrukturen des Betriebssystems, die im Chip-RAM stehen müssen.)
[Bearbeiten] Ausblick
Es war lange in der Diskussion, diesen HAM-Modus, der auf der RGB-Farbdarstellung beruht, durch einen entsprechenden Modus aufbauend auf dem HSV-Farbraum (Hue, Saturation, Value) zu ersetzen, wovon man sich noch höhere Kompressionsmöglichkeiten und/oder noch bessere Darstellungsqualität versprach. Der HAM-Modus ist jedoch auf aktuellen Computern aufgrund der gefallenen RAM-Preise und der schnelleren Grafik-Hardware nicht mehr notwendig, so dass diese Überlegungen bisher zu keiner praktischen Implementierung geführt haben.