Der Alphakanal bei Grafiken
« | 05 Feb 2019 | »Mit Alphakanal meint man in der Computergrafik keinen Fernsehsender, sondern eine zusätzliche Farbinformation eines Bildes.
Und genau an der Stelle wird es schwammig, denn viele Definitionen beschreiben den Alpha-Wert als Transparenz, also die Festlegung, wie viel eines Hintergrundes (oder anderen Bildes) durch einen Pixel durchleuchten kann.
Sieht man sich aber Programmierschnittstellen an, müsste man den Wert eigentlich gegenteilig benennen, nämlich “Deckkraft” (auch “Opacity” genannt).
Da die additive Farbmischung
mit den Farben rot
grün
und blau
immer noch sehr häufig eingesetzt wird,
bestehen viele Color
- Objekte eben aus diesen RGB
Tripel.
Wenn man von speziellen CAD-Lösungen und
(witzigerweise) der Xlib mal absieht,
sind das immer reine Byte-Werte, also von 0 für ganz dunkel/schwarz bis
255 für ganz hell.
Und daraus lassen sich dann 16777216 (also 16 Millionen) unterschiedliche
Farben mit 24 Bits aufbauen.
Mit dem Alphakanal kommt nun ein weiterer Wert von 0-255 hinzu.
Der erste Streit ist die Frage, wo der Wert angesiedelt ist, also vorne
oder hinten. ARGB
(alpha-red-green-blue) und RGBA
(red-green-blue-alpha)
kommen dann zusätzlich noch in unterschiedlichen
Byte-Reihenfolgen vor und
finden sich dann in Dateiformaten durchaus in der Form von
BGRA
(blue-green-red-alpha) und ABGR
(alpha-blue-green-red).
Doch was bedeutet nun A(lpha)?
Einst interpretierten meine Kollegen und ich selbst es als “Transparenz”
und meinten in einem proprietären Grafikprojekt, dass 0
voll-deckend und
255
voll-durchsichtig bedeutet.
Das ist vor allem ein Vorteil für die Kompatibilität zu reinem RGB
.
Denn in der IT (und in auch jenem Projekt) sind ungenutzte Bits vorzüglich
immer auf 0 gesetzt.
Und wird ein RGB Tripel-Wert als 32-bit Wert gespeichert, wo die letzten
8 Bits dann nachträglich als Alpha gedeutet werden, so sind diese
0
und damit voll-deckend.
Das Windows Bitmap Format
sei hier zum Vergleich genannt, wo Transparenz eigentlich nicht definiert ist,
aber von Programmen mit hineingespeichert werden kann.
Moderner und heutiger Standard ist jedoch das Gegenteil, wo Alpha die
Deckkraft darstellt, womit 0
voll-transparent und 255
voll-deckend
bedeutet.
Und sowohl die meisten Programmierframeworks, als auch HTML und CSS
sehen das genau so.
Folglich setzt auch das GATE-Projekt dieses zweite Schema um, obwohl mir offen gesagt das erstere (aus binären und historischen Gründen) mehr zusagen würde.
Fun-Fact am Rande:
Beim Laden einer Windows Bitmap prüft der Ladecode im GATE-Projekt, ob alle
gelesenen Alpha-Werte gleich 0
sind und patcht diese in dem Fall auf
255
, also volle Deckkraft. Somit werden alte Bilddateien, wie auch neuere
mit Transparenz korrekt geladen.
Die Transparente Farbe
Einige Grafik-Dateiformate kennen keinen eigenen Alphakanal, wollen aber dennoch Bereiche als transparent definieren. Das GIF Format sei hier als Beispiel genannt.
Diese nutzen dann einen speziellen Farbpaletten-Eintrag, bei dem festgelegt
wurde, dass eine ganz bestimmte RGB-Farbe als “transparent” zu behandeln sei,
also nicht auf den Schirm gezeichnet werden darf.
Folglich sieht man dann an solchen Stellen den Hintergrund durchscheinen.
Das Windows Icon- und Cursor - Format kennt übrigens noch einen weiteren Zustand, nämlich eine Art invertierte Transparenz. Ein solches “inverses” Pixel zwingt das System dazu das Hintergrundpixel zu scannen und dessen Farbe mit der Farbe des Icons zu XORen. Wird der Hintergrund mit einem weißen Icon-Pixel geXORt (pixel XOR 255), kommt also ein farbliches Negativbild an dieser Stelle heraus.