В компьютерной графике палитра — это набор доступных цветов, из которых можно создать изображение. В некоторых системах палитра фиксируется аппаратной конструкцией, а в других она является динамической, обычно реализуемой с помощью таблицы поиска цветов (CLUT), таблицы соответствия, в которой назначаются выбранные цвета из диапазона цветопередачи определенного цветового пространства . индекс, по которому на них можно ссылаться. Ссылаясь на цвета через индекс, который требует меньше информации, чем необходимо для описания реальных цветов в цветовом пространстве, этот метод направлен на сокращение использования данных, включая обработку, пропускную способность передачи, использование оперативной памяти и хранилища. Изображения, в которых цвета указаны ссылками на CLUT, называются изображениями с индексированными цветами .
По состоянию на 2019 год наиболее распространенным цветовым пространством изображения в видеокартах является цветовая модель RGB с глубиной цвета 8 бит на пиксель . При использовании этого метода для описания уровня яркости в каждом из каналов RGB используется 8 бит на пиксель , поэтому 24 бита полностью описывают цвет каждого пикселя. Таким образом, полная системная палитра такого оборудования включает 2 24 цвета. Цель использования меньших палитр через CLUT — снизить количество бит на пиксель за счет уменьшения набора возможных цветов, которые должны обрабатываться одновременно (часто с использованием адаптивных методов). Каждому возможному цвету присваивается индекс, который позволяет ссылаться на каждый цвет, используя меньше информации, чем необходимо для полного описания цвета. Примером является 256-цветная палитра, обычно используемая в формате файла GIF , в которой 256 цветов, используемых для представления изображения, выбираются из всего 24-битного цветового пространства, каждому из которых присваивается 8-битный индекс. Таким образом, хотя система потенциально может воспроизводить любой цвет в цветовом пространстве RGB (если позволяет ограничение в 256 цветов), требования к объему памяти на пиксель снижаются с 24 до 8 бит на пиксель.
В приложении, показывающем на экране множество различных миниатюр изображений в виде мозаики, программа может не иметь возможности одновременно загрузить все адаптивные палитры каждого отображаемого эскиза изображения в аппаратные регистры цвета. Решением является использование уникальной общей основной палитры или универсальной палитры , которую можно использовать для отображения с достаточной точностью любого типа изображения.
Это достигается путем выбора цветов таким образом, чтобы основная палитра содержала полное цветовое пространство RGB «в миниатюре», ограничивая возможные уровни, которые могут иметь красный, зеленый и синий компоненты. Такое расположение иногда называют единой палитрой . [1] Нормальный человеческий глаз в разной степени восприимчив к трем основным цветам: чем больше к зеленому, тем меньше к синему. Таким образом, схемы RGB могут воспользоваться этим, назначив больше уровней для зеленого компонента и меньше — для синего.
Построенная таким образом основная палитра может быть заполнена до 8R×8G×4B = 256 цветов , но это не оставляет места в палитре для зарезервированных цветов, индексов цвета, которые программа могла бы использовать для специальных целей. В более общем случае используется только 6R×6G×6B = 216 (как в случае с веб-цветами ), 6R×8G×5B = 240 или 6R×7G×6B = 252 , что оставляет место для некоторых зарезервированных цветов.
Затем, при загрузке мозаики миниатюр изображений (или других разнородных изображений), программа просто сопоставляет каждый исходный пиксель индексированного цвета с наиболее приближенным к нему в основной палитре (после сброса этого в аппаратные регистры цвета) и записывает результат в видеобуфер. Вот образец простой мозаики из четырех миниатюр изображений с использованием основной палитры из 240 цветов RGB плюс 16 дополнительных промежуточных оттенков серого; все изображения собираются вместе без существенной потери точности цветопередачи:
При использовании методов индексированного цвета реальные изображения представляются с большей точностью по отношению к исходному истинному цвету за счет использования адаптивных палитр (иногда называемых адаптивными палитрами ), в которых цвета выбираются или квантуются с помощью некоторого алгоритма непосредственно из исходного изображения (путем выбора наиболее распространенные цвета). Таким образом, а также при дальнейшем сглаживании индексированное цветное изображение может почти соответствовать оригиналу.
Но это создает сильную зависимость между пикселями изображения и его адаптивной палитрой. Предполагая, что графический дисплей имеет ограниченную 8-битную глубину, необходимо загрузить адаптивную палитру данного изображения в аппаратные регистры цвета до загрузки самой поверхности изображения в буфер кадра . Для отображения разных изображений с разными адаптивными палитрами их необходимо загружать по одному, как в слайд-шоу . Вот образцы четырех различных индексированных цветных изображений с цветовыми пятнами, показывающими соответствующие (и в значительной степени несовместимые) адаптивные палитры:
Отдельную запись палитры в индексированном цветном изображении можно обозначить как прозрачный цвет, чтобы выполнить простое наложение видео : наложение заданного изображения на фон таким образом, что некоторая часть перекрывающегося изображения закрывает фон, а остальная часть — нет. . Наложение титров и титров фильмов/телепередач является типичным применением наложения видео.
В накладываемом изображении (предполагается индексированный цвет) заданный элемент палитры играет роль прозрачного цвета. Обычно номер индекса 0, но можно выбрать и другой, если наложение выполняется программно . Во время разработки элементу прозрачной цветовой палитры присваивается произвольный (обычно отличительный) цвет. В приведенном ниже примере типичный стрелочный указатель указывающего устройства выполнен на оранжевом фоне, поэтому здесь оранжевые области обозначают прозрачные области (слева). Во время выполнения перекрывающееся изображение размещается в любом месте над фоновым изображением и смешивается таким образом, что если индекс цвета пикселя является прозрачным цветом, фоновый пиксель сохраняется, в противном случае он заменяется.
Этот метод используется для указателей, в типичных 2-D видеоиграх для персонажей, маркеров и т. д. (спрайты ) , для титров видео и других приложений для микширования изображений.
Некоторые ранние компьютеры, такие как Commodore 64 , MSX и Amiga, поддерживают аппаратное наложение спрайтов и/или полноэкранного видео . В этих случаях номер записи прозрачной палитры определяется аппаратным обеспечением и раньше был номером 0.
Некоторые форматы файлов индексированных цветных изображений , такие как GIF, изначально поддерживают обозначение данной записи палитры как прозрачной , свободно выбираемой среди любой записи палитры, используемой для данного изображения.
Формат файла BMP резервирует место для значений альфа-канала в своей таблице цветов, [2] однако в настоящее время это пространство не используется для хранения каких-либо данных о прозрачности и установлено на ноль. Напротив, PNG поддерживает альфа-каналы в записях палитры, обеспечивая полупрозрачность изображений с палитрой.
При работе с полноцветными изображениями некоторое оборудование для микширования видео может использовать тройку RGB (0,0,0) (без красного, без зеленого, без синего: самый темный оттенок черного, иногда называемый в этом контексте суперчерным ) в качестве прозрачного цвета. . Во время разработки его заменяет так называемый волшебный розовый . Точно так же типичное программное обеспечение для настольных издательских систем может предполагать, что из фотографий и иллюстраций должен быть исключен чистый белый цвет, тройка RGB (255 255 255), чтобы текстовые абзацы могли вторгаться в ограничивающую рамку изображения для неравномерного расположения текста вокруг предметов изображения.
Программы двухмерного рисования , такие как Microsoft Paint и Deluxe Paint , могут использовать назначенный пользователем цвет фона в качестве прозрачного цвета при выполнении операций вырезания, копирования и вставки .
Хотя битовые маски изображений и альфа-каналы родственны (поскольку они используются для одних и тех же целей), они представляют собой методы, которые вообще не предполагают использование палитр или прозрачного цвета, но за пределами изображения добавляются дополнительные слои двоичных данных.
Приложения Microsoft Windows управляют палитрой 4-битных или 8-битных устройств отображения индексированных цветов посредством специализированных функций Win32 API . Применимость палитр в режимах отображения Highcolor и Truecolor становится сомнительной. Эти API работают с так называемой «системной палитрой» и многими «логическими палитрами».
«Системная палитра» — это копия в оперативной памяти аппаратных регистров цветного дисплея, в первую очередь физическая палитра, и это уникальный общий ресурс системы. При загрузке в него загружается системная палитра по умолчанию (в основном «основная палитра», которая достаточно хорошо работает с большинством программ).
Когда данное приложение намеревается выводить раскрашенную графику и/или изображения, оно может установить свою собственную «логическую палитру», то есть свой собственный выбор цветов (до 256). Предполагается, что каждый графический элемент, который приложение пытается отобразить на экране, использует цвета своей логической палитры. Каждая программа может свободно управлять одной или несколькими логическими палитрами без дальнейшего вмешательства (заранее).
Прежде чем вывод будет эффективно выполнен, программа должна реализовать свою логическую палитру: система пытается сопоставить «логические» цвета с «физическими». Если предполагаемый цвет уже присутствует в системной палитре, система внутренне сопоставляет его с индексами системной палитры (поскольку они редко совпадают). Если желаемый цвет еще отсутствует, система применяет внутренний алгоритм, чтобы отбросить наименее используемый цвет в системной палитре (обычно тот, который используется другим окном в фоновом режиме) и заменить его новым цветом. Из-за ограниченного места для цветов в системной палитре алгоритм также пытается переназначить похожие цвета вместе и всегда будет избегать создания избыточных цветов.
Конечный результат зависит от того, сколько приложений пытаются одновременно отобразить свои цвета на экране. Окно переднего плана всегда предпочтительнее, поэтому фоновые окна могут вести себя по-разному: от повреждения до быстрой перерисовки. При изменении системной палитры система запускает определенное событие , информирующее каждое приложение. При получении окно может быстро перерисоваться с помощью одной функции Win32 API. Но это должно быть сделано явно в программном коде; отсюда тот факт, что многие программы не могут обработать это событие, и в этой ситуации их окна будут повреждены.
Приложение может принудительно загружать системную палитру определенными цветами (даже в определенном порядке), «обманывая» систему, сообщая ей, что это записи цветов, предназначенные для анимации (быстрое изменение цветов в физической палитре в определенных записях). ). Затем система предположит, что эти записи аппаратной палитры больше не являются свободными для ее алгоритма управления цветом палитры. Конечный результат зависит от навыков программы принудительной цветопередачи и поведения других программ (хотя эта проблема такая же, как и в обычном случае), а также самой операционной системы.