На этом шаге мы рассмотрим общие вопросы, связанные с кодированием цвета.
Для того чтобы компьютер имел возможность работать с цветными изображениями, необходимо представлять цвета в виде чисел - кодировать цвет. Способ кодирования зависит от цветовой модели и формата числовых данных в компьютере.
Для модели RGB каждая из компонент может представляться числами, ограниченными некоторым диапазоном - например, дробными числами от 0 до 1 либо целыми числами от 0 до некоторого максимального значения. В настоящее время достаточно распространенным является формат True Color, в котором каждая компонента представлена в виде байта, что дает 256 градаций для каждой компоненты: R=0...255, G = 0...255, В = 0...255. Количество цветов составляет 256*256*256 = 16.7 млн (224).
Такой способ кодирования цветов можно назвать компонентным. В компьютере коды изображений True Color представляются в виде троек байтов, либо упаковываются в длинное целое (четырехбайтное) - 32 бита (так, например, сделано в API Windows):
С = 00000000 bbbbbbbb gggggggg rrrrrrrr.
При работе с изображениями в системах компьютерной графики часто приходится искать компромисс между качеством изображения (требуется как можно больше цветов) и ресурсами, необходимыми для хранения и воспроизведения изображения, исчисляемыми, например, объемом памяти (надо уменьшать количество бит на пиксель).
Кроме того, некоторое изображение само по себе может использовать ограниченное количество цветов. Например, для черчения может быть достаточно двух цветов, для человеческого лица важны оттенки розового, желтого, пурпурного, красного, зеленого; а для неба - оттенки голубого и серого. В этих случаях использование полноцветного кодирования цвета является избыточным.
При ограничении количества цветов используют палитру, представляющую набор цветов, важных для данного изображения. Палитру можно воспринимать как таблицу цветов. Палитра устанавливает взаимосвязь между кодом цвета и его компонентами в выбранной цветовой модели.
В качестве примера дадим стандартную палитру дисплейных 16-цветных видеорежимов EGA, VGA (таблица 1).
Код цвета | R | G | B | Название цвета |
---|---|---|---|---|
0 | 0 | 0 | 0 | Черный |
1 | 120 | 0 | 0 | Темно-красный |
2 | 0 | 128 | 0 | Зеленый |
3 | 128 | 128 | 0 | Коричнево-зеленый |
4 | 0 | 0 | 128 | Темно-синий |
5 | 128 | 0 | 128 | Темно-пурпурный |
6 | 0 | 128 | 128 | Сине-зеленый |
7 | 128 | 128 | 128 | Серый 50% |
8 | 192 | 192 | 192 | Серый 25% |
9 | 255 | 0 | 0 | Красный |
10 | 0 | 255 | 0 | Ярко-зеленый |
11 | 255 | 255 | 0 | Желтый |
12 | 0 | 0 | 255 | Синий |
13 | 255 | 0 | 255 | Пурпурный |
14 | 0 | 255 | 255 | Голубой |
15 | 255 | 255 | 255 | Белый |
Недостатком такой палитры можно считать отсутствие одного из важных цветов - оранжевого. Существуют также иные стандартные палитры, например, 256-цветная для VGA. Компьютерные видеосистемы обычно предоставляют возможность программисту установить собственную палитру.
Каждый цвет изображения, использующего палитру, кодируется индексом, который будет определять номер строки в таблице палитры. Поэтому такой способ кодирования цвета называют индексным.
На следующем шаге мы рассмотрим формат файлов для хранения растровых изображений.