Обзор
Обычно группирование данных пикселей в необработанном виде называется кадровым буфером. Это одномерный массив значений одинакового размера. Размер каждого значения зависит от используемого цветового пространства и глубины цвета . Например, 32-битный кадровый буфер RGBA может быть определен следующим образом в C: unsigned int fb[width*height];, given that sizeof int is 4
.
Аппаратные средства обычно используют цветовое пространство RGB для аппаратной графики, такой как OpenGL и DirectX, и прямого доступа к кадровому буферу, как с / dev / fb в Linux и GDI + в Windows. Аппаратное декодирование фильмов обычно зависит от цветового пространства YCbCr. Некоторые форматы файлов изображений сохраняют свои данные в других цветовых пространствах, кроме RGB, но преобразуются в RGB в используемый ими API.
Цвет пикселя
Цвет отдельного пикселя можно представить этими способами (список не полный), предполагая цветовое пространство RGB:
Отдельные цветные каналы (True-color)
Истинный цвет - это один компонент для каждого из трех или четырех цветовых каналов, где значения отдельных цветовых каналов представляют интенсивность каждого цвета. Если у него есть альфа-канал, он работает так же, но значение альфа зависит от контекста. Обычно альфа представляет непрозрачность, где самое низкое значение является 100% прозрачным, а самое высокое значение является 100% непрозрачным. Например: (0,255,0,128) будет представлять 50% полупрозрачного зеленого цвета, учитывая RGBA True-color, используя 8-битную глубину цвета на канал.
Palette
При использовании палитр значение отдельного пикселя представляет собой индекс в массив цветов, обычно истинного цвета (хотя не подразумевает 8 бит на канал). Диапазон индекса - это количество цветов, которые могут быть представлены. Индексы 8-битной палитры были распространены и раньше, особенно на аппаратном VGA-оборудовании в начале 1990-х. Аппаратные средства могут отображать подмножество из 256 цветов за раз из пула 2 ^ 24 цветов.
Цветовые пространства
Я не хочу делать этот ответ слишком длинным, и я думаю, что Википедия отвечает на этот вопрос лучше меня, так что вот ссылка: Википедия: цветовое пространство
Цветовые пространства - это способы представления цветов и сочетания цветов.
Какое цветовое пространство выбрать для своего приложения?
Это зависит от того, что приложение делает с данными пикселей. Разные цветовые пространства определяют разные потребности. YCbCr используется движущимися изображениями, потому что он определяет уровни гаммы, которые снова определяются, например, стандартами NTSC и PAL. sRGB делает то же самое, только для компьютерных мониторов, где вы можете выбрать гамма / цветовые профили для вашего конкретного экрана. Эти цветовые пространства удобны, когда важно, чтобы цвет, который вы воспринимаете на экране, был как можно ближе к цвету, воспринимаемому на конечном носителе. RGB часто используется, когда гамма не важна, и когда экран компьютера является последним средством. С ним легко работать, поскольку цветовое пространство является линейным. Таким образом, для компьютерной игры вы, вероятно, будете использовать RGB, но для программы обработки изображений, такой как Photoshop или GIMP, вы будете поддерживать HSV / HSL / sRGB и CMYK.
При работе с необработанными пикселями в кадровом буфере, возвращаемом API, вы можете использовать RGB, если не решите иначе. При работе с движущимися изображениями предположим, что YCbCr. Аппаратное обеспечение поддерживает множество различных способов кодирования данных. Убедитесь, что вы выбрали формат с учетом аппаратной поддержки и производительности.