В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
RGBA означает красный зеленый синий альфа . Хотя его иногда описывают как цветовое пространство , на самом деле это трехканальная цветовая модель RGB, дополненная четвертым альфа-каналом . Альфа указывает, насколько непрозрачен каждый пиксель, и позволяет объединять изображение поверх других с помощью альфа-композиции , с прозрачными областями и сглаживанием краев непрозрачных областей. Каждый пиксель представляет собой 4D-вектор .
Термин не определяет, какое цветовое пространство RGB используется. Он также не указывает, умножаются ли цвета предварительно на альфа-значение, и если да, то не указывает, в каком цветовом пространстве было сделано предварительное умножение. Это означает, что для определения того, как обрабатывать изображение, требуется больше информации, чем просто «RGBA».
В некоторых контекстах аббревиатура «RGBA» означает определенную схему памяти (называемую ниже RGBA8888), а другие термины, такие как «BGRA», используются для альтернатив. В других контекстах «RGBA» означает любую схему.
В компьютерной графике пиксели, кодирующие информацию о цветовом пространстве RGBA, должны храниться в памяти компьютера (или в файлах на диске). В большинстве случаев используются четыре одинаковых по размеру смежных фрагмента памяти, по одному для каждого канала, и 0 в канале указывает на черный цвет или прозрачную альфу, в то время как все биты 1 указывают на белый цвет или полностью непрозрачную альфу. Безусловно, наиболее распространенным форматом является хранение 8 бит (один байт ) для каждого канала, что составляет 32 бита для каждого пикселя.
Порядок этих четырех байтов в памяти может различаться, что может привести к путанице при обмене данными изображения. Эти кодировки часто обозначаются четырьмя буквами в определенном порядке (чаще всего RGBA). Интерпретация этих 4-буквенных мнемоник не устоялась. Существует два типичных способа понять мнемонику «RGBA»:
В системе big-endian эти две схемы эквивалентны. Это не относится к системе little-endian , где две мнемоники являются обратными друг другу. Поэтому, чтобы быть однозначным, важно указать, какой порядок используется при ссылке на кодировку. В этой статье будет использоваться схема, которая имеет некоторую популярность, которая заключается в добавлении суффикса "8888", чтобы указать, обсуждаются ли 4 8-битных блока или "32", если обсуждается один 32-битный блок.
Прямой порядок байтов | Big-endian | |
---|---|---|
RGBA8888 | ABGR32 | RGBA32 |
ARGB32 | BGRA8888 | ARGB8888 |
RGBA32 | ABGR8888 | RGBA8888 |
В OpenGL и Portable Network Graphics (PNG) используется порядок байтов RGBA, где цвета хранятся в памяти таким образом, что R находится по самому низкому адресу, G следует за ним, B следует за ним и A — последним. В архитектуре с прямым порядком байтов это эквивалентно ABGR32. [1]
Во многих системах, когда на канал приходится более 8 бит (например, 16 бит или с плавающей точкой), каналы хранятся в порядке RGBA, даже если 8-битные каналы хранятся в каком-то другом порядке.
Каналы организованы в памяти таким образом, что одно 32-битное целое число без знака имеет альфа-выборку в старших 8 битах, за ней следует красная выборка, зеленая выборка и, наконец, синяя выборка в младших 8 битах:
Значения ARGB обычно выражаются с помощью 8 шестнадцатеричных цифр, причем каждая пара шестнадцатеричных цифр представляет значения каналов Alpha, Red, Green и Blue соответственно. Например, 80FFFF00
представляет 50,2% непрозрачного (не предварительно умноженного) желтого цвета. 80
Шестнадцатеричное значение, которое равно 128 в десятичном виде, представляет 50,2% альфа-значение, поскольку 128 составляет приблизительно 50,2% от максимального значения 255 (FF hex); чтобы продолжить расшифровку значения 80FFFF00
, первое FF
представляет максимальное значение, которое может иметь красный цвет; второе FF
похоже на предыдущее, но для зеленого цвета; последнее 00
представляет минимальное значение, которое может иметь синий цвет (фактически – никакого синего цвета). Следовательно, красный + зеленый дает желтый цвет. В случаях, когда альфа не используется, это можно сократить до 6 цифр RRGGBB
, поэтому было решено поместить альфа в верхние биты. В зависимости от контекста перед шестнадцатеричными цифрами ставится a 0x
или знак числа (#) [2] .
Эта раскладка стала популярной, когда на персональных компьютерах появился 24-битный цвет (и 32-битный RGBA). В то время программам было гораздо быстрее и проще манипулировать одним 32-битным блоком, чем четырьмя 8-битными блоками.
В системах с прямым порядком байтов это эквивалентно порядку байтов BGRA. В системах с обратным порядком байтов это эквивалентно порядку байтов ARGB.
This section's factual accuracy is disputed. (December 2015) |
В некотором программном обеспечении, созданном на машинах с обратным порядком байтов, таких как Silicon Graphics , цвета хранились в 32 битах, подобно ARGB32, но с альфа в нижних 8 битах, а не в верхних. Например, 808000FF
будет Red and Green:50.2%, Blue:0% и Alpha:100%, a brown. Это то, что вы получите, если данные RGBA8888 будут прочитаны как слова на этих машинах. Он используется в Portable Arbitrary Map и в FLTK , но в целом встречается редко.
Байты хранятся в памяти на машине с прямым порядком байтов в порядке ABGR.
#aarrggbb
иsc# scA,scR,scG,scB