Введение
Индексный цвет – это техника управления цветами цифровых изображений ограниченным образом, для экономии памяти компьютера и места для хранения файлов, а также для ускорения обновления изображения на экране и передачи файлов. Это разновидность векторного квантования при сжатии. При кодировании изображения таким способом, информация о цвете не передается непосредственно в данных пикселей изображения, а хранится в отдельном блоке данных, называемом таблицей соответствия цветов (CLUT) или палитрой – массиве цветовых характеристик. Каждый элемент массива представляет собой цвет, индексированный по его позиции в массиве. Каждый пиксель изображения содержит не полную спецификацию своего цвета, а только его индекс в палитре. Эта техника иногда называется псевдоцветом или непрямым цветом, так как доступ к цветам осуществляется косвенно.
In computing, indexed color is a technique to manage digital images' colors in a limited fashion, in order to save computer memory and file storage, while speeding up display refresh and file transfers. It is a form of vector quantization compression. When an image is encoded in this way, color information is not directly carried by the image pixel data, but is stored in a separate piece of data called a color lookup table (CLUT) or palette: an array of color specifications. Every element in the array represents a color, indexed by its position within the array. Each image pixel does not contain the full specification of its color, but only its index into the palette. This technique is sometimes referred as pseudocolor or indirect color, as colors are addressed indirectly.
История
Ранние графические системы отображения, использовавшие 8-битный индексированный цвет с буферами кадров и таблицами подстановки цветов, включают SuperPaint от Shoup (1973) и видеобуфер кадра, описанный в 1975 году Кадзией, Сазерлендом и Чидлом. Эти системы поддерживали палитру из 256 цветов RGB. SuperPaint использовал буфер кадров на основе сдвигового регистра, а система Кадзии и др. использовала буфер произвольного доступа. Ранее существовали системы, использовавшие 3-битный цвет, но обычно они рассматривали биты как независимые каналы красного, зеленого и синего, включающие или выключающие цвет, а не как совместный индекс в таблице CLUT.
Цвета и палитра
Способ кодирования цветов в цветовой палитре заданного индексированного изображения зависит от целевой платформы.
Ранние цветовые методы
Многие ранние персональные и домашние компьютеры имели очень ограниченную аппаратную палитру, способную воспроизводить лишь небольшой набор цветов. В таких случаях значение каждого пикселя напрямую соответствовало одному из этих цветов. Хорошо известные примеры включают Apple II, Commodore 64 и IBM PC CGA, все из которых имели аппаратное обеспечение, способное генерировать фиксированный набор из 16 цветов. В этих случаях изображение могло кодировать каждый пиксель 4 битами, напрямую выбирая используемый цвет. Однако в большинстве случаев аппаратное обеспечение дисплея поддерживало дополнительные режимы, в которых в одном изображении можно было использовать только подмножество этих цветов, что было полезным способом экономии памяти. Например, режим 320×200 у CGA мог отображать одновременно только четыре из 16 цветов. Поскольку палитры были полностью проприетарными, изображение, созданное на одной платформе, не могло быть правильно отображено на другой. Другие машины той эпохи могли генерировать больший набор цветов, но обычно разрешали использовать лишь их подмножество в любом одном изображении. Примерами служат 256-цветная палитра на 8-битных машинах Atari или 4096 цветов терминала VT241 в графическом режиме ReGIS. В этих случаях часто изображение позволяло отображать одновременно лишь небольшое подмножество общего количества цветов, до 16 одновременно на Atari и VT241. В целом, эти системы работали аналогично своим менее красочным аналогам, но ключевое отличие заключалось в том, что в палитре было слишком много цветов для непосредственной кодировки данных пикселей, учитывая ограниченный объем видеопамяти. Вместо этого они использовали таблицу соответствия цветов (CLUT), где данные каждого пикселя указывали на запись в CLUT, а CLUT настраивался программно. Это означало, что данные CLUT изображения должны были храниться вместе с исходными данными изображения для правильного воспроизведения.
Красный свет
Аппаратные палитры, основанные на компонентных видеосигналах, таких как YPbPr и подобные, к середине 1980-х годов в основном были заменены более гибкой цветовой моделью RGB, в которой любой цвет можно получить, смешивая различные количества трех основных цветов: красного, зеленого и синего. Хотя общее количество различных цветов зависит от количества уровней для каждого основного цвета и от конкретной аппаратной реализации (9-битный RGB обеспечивает 512 комбинаций, 12-битный RGB – 4096 и так далее), в этой модели цифро-аналоговые преобразователи (ЦАП) могут генерировать цвета, упрощая аппаратную конструкцию, а программное обеспечение может абстрактно обрабатывать количество используемых уровней и управлять цветами RGB независимо от устройства. Благодаря хранению цветов в формате RGB в палитрах индексированных файлов изображений, любое изображение может быть отображено (с помощью соответствующих преобразований) в любой системе, независимо от глубины цвета, используемой в аппаратной реализации. Сегодня аппаратное обеспечение для отображения и форматы файлов изображений, работающие с индексированными цветными изображениями, почти исключительно управляют цветами в формате RGB, а фактическим стандартом кодирования является так называемый truecolor или 24-битный RGB, с 16 777 216 различными возможными цветами. Однако индексированные цветные изображения не ограничиваются 24-битным кодированием RGB; палитры изображений могут содержать любой тип цветового кодирования. Например, формат файла PDF поддерживает индексированный цвет в других цветовых пространствах, в частности CMYK, и Adobe Distiller по умолчанию преобразует изображения в индексированный цвет, когда общее количество цветов в изображении равно или меньше 256. При использовании RGB форматы файлов TIFF и PNG могут опционально хранить RGB-тройки с точностью 16 бит (65 536 уровней на компонент), что дает в общей сложности 48 бит на пиксель. Предлагаемое расширение стандарта TIFF допускает использование цветовых палитр, отличных от RGB, но оно так и не было реализовано в программном обеспечении по техническим причинам. Таблица цветовой карты индексированного цветового режима формата файла BMP хранит свои записи в порядке BGR, а не RGB, и имеет (в текущей версии) дополнительный неиспользуемый байт для заполнения, чтобы соответствовать 32-битному выравниванию слов при обработке, но по сути это все еще 24-битное кодирование RGB. (Более ранняя версия формата BMP использовала три байта на 24-битную запись в таблице цветовой карты, и многие файлы в этом формате до сих пор используются, поэтому многие современные программы, читающие файлы BMP, поддерживают оба варианта.)
Преимущества
Индексированный цвет позволяет значительно экономить память, дисковое пространство и время передачи: при использовании truecolor каждому пикселю требуется 24 бита, или 3 байта. Типичное несжатое изображение VGA с разрешением 640×480 в формате truecolor требует 640×480×3 = 921 600 байт (900 КиБ). Если ограничить количество цветов изображения до 256, каждому пикселю потребуется всего 8 бит, или 1 байт, поэтому для примера изображения потребуется только 640×480×1 = 307 200 байт (300 КиБ), плюс 256×3 = 768 дополнительных байт для хранения самой палитры (при использовании RGB), что составляет примерно одну треть от первоначального размера. Меньшие палитры (4 бита – 16 цветов, 2 бита – 4 цвета) позволяют еще плотнее упаковывать пиксели (в шесть или двенадцать раз), но, очевидно, за счет точности цветопередачи. Индексированный цвет широко использовался в ранних персональных компьютерах и аппаратном обеспечении видеоадаптеров для снижения стоимости (в основном за счет уменьшения количества дорогостоящих на тот момент микросхем RAM), а также для удобства управления изображениями на компьютерах с ограниченной вычислительной мощностью процессоров (порядка 4–8 МГц) и при хранении файлов (на кассетных лентах и дискетах низкой плотности). К заметным компьютерным графическим системам 1980-х годов, активно (или даже исключительно) использовавшим псевдоцветные палитры, относятся CGA, EGA и VGA (для IBM PC-совместимых), Atari ST, а также OCS и AGA Amiga. Файлы изображений, которыми обменивались в сети CompuServe в начале 1990-х годов, были заключены в формат GIF. Впоследствии веб-страницы HTML использовали GIF вместе с другими форматами файлов, поддерживающими индексированный цвет, такими как PNG, для быстрой передачи изображений с ограниченной палитрой и их хранения в ограниченном объеме памяти. Большинство форматов файлов изображений, поддерживающих индексированный цвет, также обычно поддерживают различные схемы сжатия, что повышает их эффективность при хранении изображений в небольших файлах. Интересные художественные эффекты и цветовые манипуляции можно легко добиться, изменяя цветовую палитру индексированных изображений, например, для создания изображений в сепии. Благодаря отдельной структуре палитры в индексированных изображениях, они идеально подходят для переназначения оттенков серого в псевдоцветные изображения с использованием специальных цветовых палитр. Простую видеонакладку можно легко реализовать с помощью техники прозрачного цвета. Манипулируя аппаратными цветовыми регистрами (таблицей соответствия цветов, или CLUT) видеоадаптера в графических режимах с индексированным цветом, можно добиться полноэкранной цветной анимации без перерисовки изображения, то есть с минимальной нагрузкой на процессор; изменение значений регистра влияет на весь экран одновременно. Анимация цветовой карты, также известная как цветовое циклирование, широко используется в демосцене. Экран загрузки Microsoft Windows в Windows 95, 98, ME и 2000 Professional (использующий режим отображения VGA 320x200x256, поскольку он является наибольшим общим делителем для всех ПК) использует эту технику для прокрутки градиентной полосы в нижней части экрана; изображение статично и не требует перерисовки пикселей после первоначального отображения. Пользовательские экраны загрузки могли использовать циклические цвета для анимации других частей изображения.
Форматы файлов изображений, поддерживающие индексированный цвет
Это одни из наиболее репрезентативных форматов файлов изображений, поддерживающих индексированные цветовые режимы. Некоторые из них поддерживают другие режимы (например, truecolor), но здесь перечислены только индексированные цветовые режимы. ПРИМЕЧАНИЕ: большинство форматов также поддерживают цветовую таблицу с меньшим количеством цветов, чем максимальное количество, которое может предложить заданная битовая глубина.
* 64 (true, not EHB), 128 and 256 color modes only available for the AGA Amiga chipset. ** Native support for proprietary compression schemes. *** RLE with optional proprietary Delta leaps.
Сокращение Полное название Разработчик Расширение DOS 1 бит (2) 2 бита (4) 3 бита (8) 4 бита (16) 5 бит (32) 6 бит (64) 7 бит (128) 8 бит (256) Сжатие
PCX PC Paintbrush Image File ZSoft Corporation pcx RLE
ILBM InterLeaved BitMap Electronic Arts lbm, iff Без сжатия, RLE
GIF Graphics Interchange Format Compuserve gif LZW
TGA TARGA File format Truevision tga, vda, icb, vst Без сжатия, RLE
TIFF Tag(ged) Image File Format Aldus tif Без сжатия, DEFLATE, LZW, PackBits, CCITT Group 3 fax, CCITT Group 4 fax, JPEG, другие менее распространенные (**)
BMP Device independent Bitmap Microsoft bmp, dib, rle Без сжатия, RLE (***)
PSD Photoshop Document Adobe Systems psd PackBits
PNG Portable Network Graphics PNG Development Group png DEFLATE
* 64 (true, not EHB), 128 and 256 color modes only available for the AGA Amiga chipset. ** Native support for proprietary compression schemes. *** RLE with optional proprietary Delta leaps.
* 64 (истинно, не EHB), 128 и 256 цветовых режимов доступны только для чипсета AGA Amiga. ** Встроенная поддержка проприетарных схем сжатия. *** RLE с опциональными проприетарными дельта-прыжками.
* 64 (true, not EHB), 128 and 256 color modes only available for the AGA Amiga chipset. ** Native support for proprietary compression schemes. *** RLE with optional proprietary Delta leaps.