Model kolorów RGBA
RGBA oznacza czerwony, zielony, niebieski alfa . Chociaż czasami określa się to jako przestrzeń kolorów , w rzeczywistości jest to trzykanałowy model kolorów RGB uzupełniony czwartym kanałem alfa . Alfa wskazuje, jak nieprzezroczysty jest każdy piksel i umożliwia łączenie obrazu z innymi za pomocą kompozycji alfa z przezroczystymi obszarami i wygładzaniem krawędzi nieprzezroczystych obszarów.
Termin ten nie definiuje używanej przestrzeni kolorów RGB. Nie określa również, czy kolory są wstępnie pomnożone przez wartość alfa, czy nie, a jeśli tak, nie określa, w jakiej przestrzeni kolorów wykonano wstępne mnożenie. Oznacza to, że do określenia sposobu obsługi potrzeba więcej informacji niż tylko „RGBA”. obraz.
W niektórych kontekstach skrót „RGBA” oznacza określony układ pamięci (zwany poniżej RGBA8888 ), a inne terminy, takie jak „BGRA”, są używane jako alternatywy. W innych kontekstach „RGBA” oznacza dowolny układ.
Reprezentacja
W grafice komputerowej piksele kodujące informację o przestrzeni barw RGBA muszą być przechowywane w pamięci komputera (lub w plikach na dysku). W większości przypadków używane są cztery sąsiednie fragmenty pamięci o równej wielkości, po jednym dla każdego kanału, a 0 w kanale oznacza kolor czarny lub przezroczystą alfa, podczas gdy wszystkie bity 1 oznaczają białą lub całkowicie nieprzezroczystą alfa. Zdecydowanie najpopularniejszym formatem jest przechowywanie 8 bitów (jeden bajt ) na każdy kanał, czyli 32 bity na każdy piksel.
Kolejność tych czterech bajtów w pamięci może być różna, co może prowadzić do zamieszania podczas wymiany danych obrazu. Te kodowania są często oznaczone czterema literami w określonej kolejności (np. RGBA, ARGB itp.). Interpretacja tych 4-literowych mnemoników nie jest dobrze ustalona. Istnieją dwa typowe sposoby rozumienia mnemonika, takiego jak „RGBA”:
- W schemacie kolejności bajtów „RGBA” oznacza bajt R, po którym następuje bajt G, po którym następuje bajt B i po którym następuje bajt A. Schemat ten jest powszechnie używany do opisywania formatów plików lub protokołów sieciowych, które są zorientowane bajtowo.
- W schemacie kolejności słów „RGBA” oznacza pełne 32-bitowe słowo, gdzie R jest bardziej znaczące niż G, które jest bardziej znaczące niż B, które jest bardziej znaczące niż A.
W systemie big-endian oba schematy są równoważne. Nie dotyczy to Little-Endian , w którym te dwa mnemoniki są względem siebie odwrotne. Dlatego, aby zachować jednoznaczność, ważne jest określenie, jaka kolejność jest stosowana w odniesieniu do kodowania. W tym artykule wykorzystany zostanie schemat, który cieszy się pewną popularnością, polegający na dodaniu przyrostka „8888” w celu wskazania, czy omawiane są 4 jednostki 8-bitowe, lub „32”, jeśli omawiana jest jedna jednostka 32-bitowa.
Little-endian | Big-endian | |
---|---|---|
RGBA8888 | ABGR32 | RGBA32 |
ARGB32 | BGRA8888 | ARGB8888 |
RGBA32 | ABGR8888 | RGBA8888 |
RGBA8888
W OpenGL i Portable Network Graphics (PNG) używana jest kolejność bajtów RGBA, w której kolory są przechowywane w pamięci w taki sposób, że R znajduje się pod najniższym adresem, G po nim, B po nim i A na końcu. W architekturze Little Endian jest to odpowiednik ABGR32.
W wielu systemach, w których na kanał jest więcej niż 8 bitów (np. 16 bitów lub liczba zmiennoprzecinkowa), kanały są przechowywane w kolejności RGBA, nawet jeśli kanały 8-bitowe są przechowywane w innej kolejności.
ARGB32
Kanały są rozmieszczone w pamięci w taki sposób, że pojedyncza 32-bitowa liczba całkowita bez znaku ma próbkę alfa w 8 najwyższych bitach, po której następuje próbka czerwona, próbka zielona i na końcu próbka niebieska w 8 najniższych bitach:
Wartości ARGB są zwykle wyrażane za pomocą 8 cyfr szesnastkowych , przy czym każda para cyfr szesnastkowych reprezentuje odpowiednio wartości kanału alfa, czerwonego, zielonego i niebieskiego. Na przykład 80FFFF00
reprezentuje 50,2% nieprzezroczystego (niewstępnie pomnożonego) koloru żółtego. Wartość 80
szesnastkowo, czyli 128 w systemie dziesiętnym, reprezentuje 50,2% wartości alfa, ponieważ 128 stanowi w przybliżeniu 50,2% maksymalnej wartości 255 (FF szesnastkowo); aby kontynuować odszyfrowanie 80FFFF00
, pierwszy FF
reprezentuje maksymalną wartość, jaką może mieć kolor czerwony; drugi FF
jest jak poprzedni, ale na zielono; ostatnie 00
reprezentuje minimalną wartość, jaką może mieć kolor niebieski (w rzeczywistości – brak koloru niebieskiego). W rezultacie kolor czerwony + zielony daje kolor żółty. W przypadkach, gdy alfa nie jest używana, można ją skrócić do 6 cyfr RRGGBB
, dlatego zdecydowano się umieścić alfa w górnych bitach. W zależności od kontekstu przed cyframi szesnastkowymi umieszczany jest znak 0x lub znak numeryczny (#).
Układ ten stał się popularny, gdy na komputerach osobistych wprowadzono 24-bitowy kolor (i 32-bitowy RGBA). W tamtym czasie programy manipulowały jedną jednostką 32-bitową znacznie szybciej i łatwiej niż czterema jednostkami 8-bitowymi.
W systemach Little-Endian jest to równoważne kolejności bajtów BGRA. W systemach typu big-endian jest to równoważne kolejności bajtów ARGB.
RGBA32
W niektórych programach pochodzących z maszyn typu big-endian, takich jak Silicon Graphics , kolory były przechowywane w 32 bitach podobnie jak ARGB32, ale z alfa w 8 dolnych bitach, a nie u góry. Na przykład 808000FF
będzie mieć kolor Czerwony i Zielony:50,2%, Niebieski:0% i Alfa:100%, czyli brązowy. Oto, co można uzyskać, jeśli dane RGBA8888 zostaną odczytane na tych maszynach jako słowa. Jest używany w Portable Arbitrary Map i FLTK , ale ogólnie jest rzadki.
Bajty są przechowywane w pamięci maszyny z małym końcem w kolejności ABGR.
Zobacz też
Linki zewnętrzne
- Przezroczystość alfa w specyfikacji W3C PNG
- Kolory RGBA – strona podglądu z informacjami o implementacji na CSS3.info