Введение
таблицы поиска цветов
В компьютерной графике, конечный набор доступных цветов.
In computer graphics, a finite set of available colors
В компьютерной графике палитра — это набор доступных цветов, из которых может быть создано изображение. В некоторых системах палитра фиксирована аппаратной конструкцией, а в других — динамична, обычно реализуется посредством таблицы поиска цветов (CLUT) — таблицы соответствий, в которой выбранным цветам из диапазона цветовоспроизведения определенного цветового пространства присваивается индекс, по которому к ним можно обратиться. Используя индекс для ссылки на цвета, что требует меньше информации, чем для описания самих цветов в цветовом пространстве, эта техника направлена на снижение объема используемых данных, включая вычислительную нагрузку, пропускную способность передачи, использование оперативной памяти и объем хранения. Изображения, в которых цвета задаются ссылками на CLUT, называются изображениями с индексированной цветовой палитрой.
Описание
По состоянию на 2019 год наиболее распространенным цветовым пространством в графических картах является RGB-модель с 8 битами на канал, обеспечивающая 8-битную глубину цвета. При использовании этой техники 8 бит на пиксель используются для описания уровня яркости в каждом из каналов RGB, следовательно, 24 бита полностью описывают цвет каждого пикселя. Полная палитра системы для такого оборудования, таким образом, содержит 16 777 216 цветов (2 в 24-й степени). Цель использования уменьшенных палитр с помощью CLUT (таблиц цветоперехода) – снизить количество бит на пиксель за счет уменьшения набора обрабатываемых цветов (часто с использованием адаптивных методов). Каждому возможному цвету присваивается индекс, что позволяет ссылаться на него, используя меньше информации, чем требуется для полного описания цвета. Примером является 256-цветная палитра, часто используемая в формате GIF, где 256 цветов, используемых для представления изображения, выбираются из всего 24-битного цветового пространства, и каждому из них присваивается 8-битный индекс. Таким образом, хотя система потенциально может воспроизвести любой цвет в RGB-пространстве (если это позволяет ограничение в 256 цветов), объем памяти, необходимый для хранения одного пикселя, уменьшается с 24 до 8 бит.
Прозрачность в паллетах
Одно изображение в палитре индексированного цветного изображения может быть назначено как прозрачный цвет для выполнения простого видео-наложения: наложения данного изображения на фон таким образом, что часть наложенного изображения скрывает фон, а остальная часть – нет. Наложение титров и заставок фильмов и телепередач – типичное применение видео-наложения. В изображении, предназначенном для наложения (предполагается использование индексированной цветовой модели), определенная запись палитры играет роль прозрачного цвета. Обычно это индекс 0, но другие значения могут быть выбраны, если наложение выполняется программно. При проектировании, запись прозрачного цвета в палитре присваивается произвольному (обычно хорошо заметному) цвету. В приведенном ниже примере типичный курсор-стрелка для устройства указания выполнен на оранжевом фоне, поэтому оранжевые области обозначают прозрачные области (слева). Во время выполнения наложенное изображение размещается в любом месте над фоновым изображением и смешивается таким образом: если индекс цвета пикселя соответствует прозрачному цвету, то сохраняется пиксель фона, в противном случае он заменяется. Эта техника используется для курсоров, в типичных 2D-видеоиграх для персонажей, пуль и т.д. (спрайтов), для создания видео-титров и в других приложениях для смешивания изображений. Некоторые ранние компьютеры, такие как Commodore 64, MSX и Amiga, поддерживали спрайты и/или полноэкранное видео-наложение аппаратно. В этих случаях номер записи прозрачного цвета в палитре определяется аппаратным обеспечением и обычно был равен 0. Некоторые форматы файлов изображений с индексированной цветовой моделью, такие как GIF, изначально поддерживают назначение определенной записи палитры как прозрачной, с возможностью свободного выбора среди любых записей палитры, используемых для данного изображения. Формат файла BMP резервирует место для значений альфа-канала в своей цветовой таблице, однако в настоящее время это место не используется для хранения данных о прозрачности и установлено в нуль. В отличие от него, PNG поддерживает альфа-каналы в записях палитры, что позволяет реализовать полупрозрачность в изображениях с палитрой. При работе с изображениями в формате truecolor, некоторое видео-оборудование для смешивания может использовать RGB-триплет (0,0,0) (отсутствие красного, зеленого и синего: самый темный оттенок черного, иногда называемый «суперчерным» в этом контексте) в качестве прозрачного цвета. При проектировании он заменяется так называемым «магическим розовым». Аналогично, типичное программное обеспечение для настольной публикации может исключать чистый белый цвет, RGB-триплет (255,255,255), из фотографий и иллюстраций, чтобы текстовые абзацы могли выходить за границы изображения для нерегулярного расположения текста вокруг объектов изображения. 2D-редакторы, такие как Microsoft Paint и Deluxe Paint, могут использовать пользовательский цвет фона в качестве прозрачного цвета при выполнении операций вырезания, копирования и вставки. Хотя они связаны (поскольку используются для одних и тех же целей), битовые маски изображения и альфа-каналы – это методы, которые не предполагают использования палитры или прозрачного цвета, а используют дополнительные двоичные слои данных, добавленные вне изображения.
Microsoft Windows
Приложения Microsoft Windows управляют палитрой 4-битных или 8-битных индексированных цветовых дисплеев посредством специализированных функций Win32 API. Применимость палитр в режимах Highcolor и Truecolor становится сомнительной. Эти API работают с так называемой "системной палитрой" и множеством "логических палитр". "Системная палитра" представляет собой копию в оперативной памяти аппаратных регистров цветового дисплея, прежде всего физическую палитру, и является уникальным, общим ресурсом системы. При загрузке она заполняется палитрой системы по умолчанию (в основном "мастер-палитрой", которая достаточно хорошо работает с большинством программ). Когда приложение намеревается вывести цветную графику и/или изображения, оно может установить собственную "логическую палитру", то есть свой собственный набор цветов (до 256). Предполагается, что каждый графический элемент, который приложение пытается отобразить на экране, использует цвета своей логической палитры. Каждая программа может свободно управлять одной или несколькими логическими палитрами без предварительного вмешательства. Прежде чем вывод будет осуществлен, программа должна реализовать свою логическую палитру: система пытается сопоставить "логические" цвета с "физическими". Если требуемый цвет уже присутствует в системной палитре, система внутренне сопоставляет логические индексы с индексами системной палитры (поскольку они редко совпадают). Если требуемого цвета еще нет, система применяет внутренний алгоритм для удаления наименее используемого цвета в системной палитре (обычно используемого другим окном на заднем плане) и замены его новым цветом. Ввиду ограниченного места для цветов в системной палитре, алгоритм также пытается переназначить похожие цвета вместе и всегда избегает создания избыточных цветов. Окончательный результат зависит от количества приложений, одновременно пытающихся отобразить свои цвета на экране. Окно на переднем плане всегда имеет приоритет, поэтому окна на заднем плане могут вести себя по-разному: от повреждения до быстрой перерисовки. Когда системная палитра изменяется, система генерирует определенное событие, чтобы уведомить каждое приложение. Получив это событие, окно может быстро перерисоваться, используя одну функцию Win32 API. Однако это должно быть реализовано явно в коде программы; поэтому многие программы не обрабатывают это событие, и их окна в этой ситуации повреждаются. Приложение может принудительно загрузить в системную палитру определенные цвета (даже в определенном порядке), "обманув" систему, сообщив ей, что это цветовые записи, предназначенные для анимации (быстрые изменения цветов в физической палитре по определенным индексам). Система тогда предполагает, что эти аппаратные записи палитры больше не свободны для ее алгоритма управления цветом палитры. Окончательный результат зависит от умения программы, принудительно изменяющей цвета, и поведения других программ (хотя проблема остается той же самой), а также от самой операционной системы.