Открыть сервис

Индексированная палитра

Индексированная палитра — это способ представления цифрового изображения, при котором каждому пикселю присваивается не значение цвета напрямую, а индекс (номер) из заранее заданной таблицы цветов, называемой палитрой. Данный метод позволяет значительно сократить объём памяти, необходимый для хранения и передачи изображения, за счёт ограничения количества используемых цветов. Индексированные палитры широко применялись в ранних компьютерных системах, графических адаптерах, форматах файлов (например, GIF, PNG-8) и в областях, где критичны минимальный размер данных и предсказуемость цветопередачи.

Принцип работы

В отличие от полноцветных изображений (например, True Color с 24 битами на пиксель), где каждый пиксель кодирует три компонента (красный, зелёный, синий) напрямую, индексированное изображение хранит для каждого пикселя только одно число — индекс. Сама палитра представляет собой таблицу, где каждый индекс соответствует определённому цвету, заданному, как правило, в модели RGB. Размер палитры (количество цветов) определяет разрядность индекса: для палитры из 256 цветов требуется 8 бит на пиксель, для 16 цветов — 4 бита, для 2 цветов — 1 бит.

Структура данных

Типичное индексированное изображение состоит из двух основных частей:

  • Таблица цветов (палитра, Color Look-Up Table, CLUT): массив фиксированной длины, каждый элемент которого содержит значения красного, зелёного и синего каналов (обычно по 8 бит на канал, итого 24 бита на цвет).
  • Массив индексов: двумерный массив, где каждый элемент (пиксель) хранит число от 0 до N-1, где N — количество цветов в палитре.

При отображении изображения графическая система считывает индекс пикселя, обращается к палитре по этому индексу и выводит на экран соответствующий цвет.

История

Концепция индексированной палитры возникла в 1960–1970-х годах в связи с ограничениями аппаратного обеспечения. Первые компьютерные дисплеи и графические адаптеры могли отображать лишь ограниченное количество цветов одновременно. Например, в 1970-х годах терминалы с векторной графикой часто использовали монохромные палитры. С появлением цветных растровых дисплеев (например, IBM 5151 в 1981 году) и адаптеров CGA (Color Graphics Adapter) в 1981 году, поддерживавших 4 цвета из 16-цветной палитры, индексированные палитры стали стандартом.

В 1980-х годах с развитием персональных компьютеров (IBM PC/AT, Commodore Amiga, Apple Macintosh) и игровых консолей (Nintendo Entertainment System, Sega Genesis) индексированные палитры стали основным способом работы с цветом. Адаптеры EGA (Enhanced Graphics Adapter, 1984) и VGA (Video Graphics Array, 1987) поддерживали палитры до 256 цветов, что позволило создавать более реалистичные изображения при ограниченном объёме видеопамяти.

В 1990-х годах с распространением формата GIF (Graphics Interchange Format, 1987) и PNG (Portable Network Graphics, 1996) индексированные палитры стали широко использоваться в вебе для создания иконок, логотипов и простой анимации. С появлением 24-битных True Color-дисплеев и увеличением объёмов памяти индексированные палитры постепенно уступили место полноцветным изображениям, но остаются востребованными в специализированных областях.

Классификация палитр

Индексированные палитры можно классифицировать по нескольким признакам.

По размеру (количеству цветов)

  • Монохромные (2 цвета): 1 бит на пиксель. Примеры: чёрно-белые изображения, бинарные маски.
  • Малые (4–16 цветов): 2–4 бита на пиксель. Использовались в адаптерах CGA, EGA, ранних игровых консолях.
  • Стандартные (256 цветов): 8 бит на пиксель. Наиболее распространённый тип в эпоху VGA и раннего веба.
  • Расширенные (более 256 цветов): редко встречаются из-за неэффективности; обычно используются в специализированных форматах (например, некоторые версии PNG-8 поддерживают до 256 цветов, но не более).

По способу формирования

  • Фиксированные (аппаратные): палитра задаётся производителем оборудования и не может быть изменена пользователем. Примеры: палитры CGA (16 цветов, из которых одновременно доступны 4), палитры EGA (64 цвета, 16 одновременно).
  • Программируемые: палитра может быть изменена программно. Примеры: VGA (256 цветов из 262144 возможных), палитры в формате GIF.
  • Оптимизированные (адаптивные): палитра создаётся на основе анализа конкретного изображения для минимизации потери качества. Используются в алгоритмах сжатия (например, GIF, PNG-8) и в графических редакторах.

По типу цветового пространства

  • RGB-палитры: наиболее распространённые, задают цвета в модели RGB.
  • Палитры с альфа-каналом: некоторые форматы (например, PNG-8) поддерживают прозрачность, добавляя четвёртый канал (альфа) к каждому цвету палитры.
  • Палитры в других цветовых моделях: редко, но встречаются в специализированных системах (например, YUV, HSV).

Применение

Компьютерная графика и игры

Индексированные палитры были стандартом для графики в 1980-х — начале 1990-х годов. Игры для IBM PC (например, «King’s Quest», «Doom»), Commodore Amiga и игровых консолей использовали 256-цветные палитры для создания спрайтов, фонов и интерфейсов. Ограничение цвета позволяло разработчикам эффективно использовать видеопамять и процессорное время. В современных ретро-играх и пиксель-арте индексированные палитры продолжают применяться для стилизации.

Веб-графика

Форматы GIF и PNG-8, основанные на индексированных палитрах, широко используются для создания иконок, кнопок, логотипов и простой анимации. GIF поддерживает до 256 цветов и прозрачность, а также анимацию. PNG-8 обеспечивает лучшее сжатие без потерь и поддержку альфа-канала (прозрачности). Ограничение цвета делает эти форматы компактными, что важно для быстрой загрузки веб-страниц.

Цифровое сжатие

Индексированные палитры являются основой алгоритмов сжатия с потерями, таких как квантование цвета. В процессе квантования полноцветное изображение (например, 24-битное) преобразуется в индексированное с уменьшенным количеством цветов (например, 256). Это позволяет значительно сократить размер файла при незначительной потере качества. Алгоритмы, такие как алгоритм Медианной резки (Median Cut) и алгоритм К-средних (K-means), используются для создания оптимальных палитр.

Научная и медицинская визуализация

В областях, где требуется отображение данных с ограниченной цветовой палитрой (например, тепловые карты, спектрограммы, медицинские снимки), индексированные палитры позволяют точно задать соответствие между числовыми значениями и цветами. Это особенно важно для псевдоцветного кодирования, где каждый цвет соответствует определённому диапазону данных.

Графические редакторы

Программы, такие как Adobe Photoshop, GIMP, Paint.NET, поддерживают работу с индексированными палитрами. Пользователь может преобразовать изображение в индексированный режим, выбрать количество цветов, настроить палитру и применить дизеринг (смешивание цветов) для имитации отсутствующих оттенков.

Преимущества и недостатки

Преимущества

  • Экономия памяти: индексированное изображение занимает значительно меньше места, чем полноцветное (например, 8 бит на пиксель против 24 бит).
  • Быстрая обработка: операции с индексами требуют меньше вычислительных ресурсов, чем с полноцветными данными.
  • Предсказуемость цветопередачи: палитра фиксирована, что гарантирует одинаковое отображение на разных устройствах при наличии одной и той же палитры.
  • Простота реализации: алгоритмы работы с индексированными изображениями просты и эффективны.

Недостатки

  • Ограниченное количество цветов: изображения с плавными переходами (фотографии, градиенты) могут выглядеть ступенчато или с артефактами.
  • Потеря качества: при преобразовании полноцветного изображения в индексированное неизбежна потеря информации.
  • Зависимость от палитры: изменение палитры (например, при редактировании) может привести к искажению цветов.
  • Неэффективность для больших палитр: при увеличении количества цветов размер индекса растёт, и преимущество в объёме памяти снижается.

Примеры

Стандартная палитра VGA (256 цветов)

Палитра VGA (Video Graphics Array) была разработана IBM в 1987 году и стала стандартом для IBM PC-совместимых компьютеров. Она содержит 256 цветов, выбранных из 262144 возможных (6 бит на канал). Палитра VGA включает 16 базовых цветов (чёрный, синий, зелёный, голубой, красный, пурпурный, жёлтый, белый и их яркие версии) и 240 дополнительных, полученных путём смешивания. Эта палитра использовалась в операционных системах (MS-DOS, Windows 3.x), играх и графических приложениях.

Палитра «Web Safe» (216 цветов)

В 1990-х годах для обеспечения единообразного отображения цветов в веб-браузерах была разработана палитра «Web Safe» (также известная как «Browser Safe Palette»). Она состоит из 216 цветов, каждый из которых получается комбинацией значений 0, 51, 102, 153, 204, 255 для каждого из трёх каналов RGB (6×6×6 = 216). Эта палитра гарантировала, что цвета будут отображаться одинаково на большинстве мониторов того времени, поддерживающих 256 цветов. С появлением 24-битных дисплеев необходимость в ней отпала.

Палитра Commodore Amiga (4096 цветов)

Компьютер Commodore Amiga (1985) поддерживал индексированную палитру из 4096 цветов (12 бит на пиксель), что позволяло отображать более реалистичные изображения по сравнению с 256-цветными системами. Палитра Amiga была программируемой и использовалась в играх и демосцене.

Интересные факты

  • В некоторых ранних игровых консолях (например, Nintendo Entertainment System) палитра была фиксированной и состояла из 64 цветов, но одновременно на экране могло отображаться только 16 цветов (8 для спрайтов и 8 для фона).
  • Формат GIF (Graphics Interchange Format) был разработан компанией CompuServe в 1987 году и изначально поддерживал только 256 цветов. Позже, в 1989 году, была добавлена поддержка анимации.
  • Алгоритм квантования цвета, используемый в GIF, может приводить к появлению артефактов, таких как цветные полосы на градиентах. Для их смягчения применяется дизеринг (dithering).
  • В современных графических процессорах (GPU) индексированные палитры используются редко из-за высокой производительности полноцветной обработки, но они всё ещё применяются в некоторых мобильных и встраиваемых системах для экономии энергии.

Источники

  • Foley, J. D., van Dam, A., Feiner, S. K., Hughes, J. F. (1990). Computer Graphics: Principles and Practice. Addison-Wesley.
  • «Color Look-Up Table (CLUT)» — Microsoft Developer Network (MSDN).
  • «GIF (Graphics Interchange Format)» — W3C, 1990.
  • «PNG (Portable Network Graphics) Specification» — W3C, 1996.
  • «VGA (Video Graphics Array)» — IBM Technical Reference, 1987.
  • «Web Safe Colors» — Netscape Communications, 1995.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →