5.3. Кодирование цветов

Любой цвет является композицией трех основных цветов – красного (Red), зеленого (Green) и синего (Blue). В зависимости от того, какой «вес» имеет каждый из этих цветов, получается все разнообразие цветов окружающего нас мира. В цифровых компьютерах «вес» каждого цвета должен быть представлен некоторой дискретной величиной. В простейшем случае для кодирования каждого из основных цветов достаточно по одному биту (1 = цвет включен, 0 = цвет выключен), называемых битами R, G и В. Из трех основных цветов с двоичным кодированием получается 8 цветовых комбинаций, показанных на рис. 5.2. Когда все цвета выключены, получается черный цвет. Если ввести еще один бит, который управляет яркостью или интенсивностью (Intensity), то получится 4–битная комбинация, называемая IRGB–цветом. Управление интенсивностью дает еще 8 цветов, поэтому на экране можно получить 16 цветов, кодирование и названия которых приведены в табл. 5.2.

Таблица 5.2 Базовое кодирование цветов

I

R

G

B

Название

Компоненты

0

0

0

0

0

Черный

Нет

1

0

0

0

1

Синий

Синий

2

0

0

1

0

Зеленый

Зеленый

3

0

0

1

1

Голубой

Зеленый + синий

4

0

1

0

0

Красный

Красный

5

0

1

0

1

Вишневый

Красный + синий

6

0

1

1

0

Коричневый

Красный + зеленый

7

0

1

1

1

Белый

Красный + зеленый + синий

8

1

0

0

0

Серый

I

9

1

0

0

1

Ярко–синий

I + синий

10

1

0

1

0

Ярко–зеленый

I + зеленый

11

1

0

1

1

Ярко–голубой

I + зеленый + синий

12

1

1

0

0

Ярко–красный

I + красный

13

1

1

0

1

Ярко вишневый

I + красный + синий

14

1

1

1

0

Желтый

I + красный + зеленый

15

1

1

1

1

Ярко–белый

I + красный + зеленый + синий

Восприятие цветов зависит от индивидуальных особенностей человека, а также аппаратной настройки монитора, поэтому в литературе вишневый (magenta) цвет назы

вается пурпурным, малиновым и сиреневым, коричневый – золотистым, голубой – бирюзовым и даже циановым, ярко–красный – розовым и т.д. Каждый из четырех цветовых элементов IRGB в конце концов связан с формированием активного светового излучения. Чем больше элементов находится в состоянии 1, тем ярче будет свечение, но одновременно тем более «размытым» будет восприниматься цвет. Для глаза каждый чистый основной цвет R, G или В оказывается визуально более воспринимаемым, чем любой из смешанных цветов и даже чем «яркий» вариант этого же цвета.

В 16–цветном режиме можно пользоваться всеми цветами с номерами 0 – 15, приведенными в табл. 5.2. В 8–цветном режиме нет управления интенсивностью, поэтому здесь применяются цвета с номерами 0 – 7. В 4–цветном режиме можно выбрать любые 4 цвета из 16; выбранные цвета образуют так называемую палитру. Наконец, в 2–цветном режиме разрешены только цвета 0 и 7 – черный и обычный белый.

В адаптере EGA имеются режимы, в которых для кодирования каждого из основных цветов отведено по два бита, т.е. полный цвет кодируется шестью битами RrGgBb (00 = цвет выключен, 01 = слабый цвет, 10 = обычный, 11 = яркий). Такое кодирование расширяет общее число цветов до 64. Тем не менее одновременно на экране может наблюдаться только 16 цветов, так как в видеобуфере пикселы кодируются 4–битными значениями.

В адаптере VGA введены режимы, в которых для кодирования каждого из основных цветов отведено по 6 бит, т.е. возможное число цветов возросло до огромной величины 256 к. Однако одновременно на экране наблюдается только 256 цветов, так как в режиме с максимальной «цветностью» каждый пиксел кодируется в видеобуфере 8 битами.

В адаптере SVGA каждый цвет кодируется 16 битами (High Color), 24 битами или 32 битами (True Color), что составляет 16,7 млн. цветов.

В чем разница между 24–разрядным и 32–разрядным кодированием цвета?

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

Достаточно ли 16,7 млн. цветов для любого изображения?

Хотя такого количества различных цветов и достаточно для кодирования большинства изображений, используемая в настоящее время система кодирования имеет принципиальный недостаток – количество градаций каждого из основных цветов не может превышать 256. Например, если заполнить экран одним из основных цветов с плавно меняющейся яркостью, то нетрудно заметить границы между дискретными уровнями. Это не позволяет точно передавать изображения, содержащие большие области плавного изменения цветов. Однако при кодировании изображений, в которых подобных областей нет, используемая система дает вполне удовлетворительное качество передачи цвета.