Model kolorów RGBA

Przykład obrazu RGBA nałożonego na tło szachownicy. alfa wynosi 0% na górze i 100% na dole.

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.

Konwerter reprezentacji RGBA
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:

Sample layout in a typical 32bpp pixel

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.

RGBA pixel layout

Bajty są przechowywane w pamięci maszyny z małym końcem w kolejności ABGR.

Zobacz też

Linki zewnętrzne