Цветовое разрешение. Представление цвета в системах программирования для Windows.
В графических режимах видеосистемы ПЭВМ для кодирования цвета каждого пиксела отводится некоторое количество двоичных разрядов. Это число разрядов называют глубиной цвета. При глубине цвета, равной N можно одновременно отобразить 2N цветов. В режиме HighColor глубина цвета составляет 15 или 16 бит, количество цветов – 32768 или 65536, В режиме TrueColor глубина цвета составляет 24 бита, количество цветов – 16 777 216. Такого количества цветов более чем достаточно практически для подавлящего большинства прикладных задач, поскольку оно существенно превосходит число цветов, различаемое среднестатистическим наблюдателем. (Следует заметить, что в некоторых профессиональных системах цветоделения на отдельных этапах используются 36, 48 и даже 64 разрядные цвета [Корриган]). Цвета представляются в модели RGB. В режиме TrueColor под каждый из основных цветов отводится по 8 бит. В режиме HighColor под каждый из основных цветов отводится либо по 5 бит (1 бит не используется), либо по 5 бит на красный и синий и 6 бит на зеленый. В MS Visual C/C++ для цвета используется тип COLORREF, который на самом деле определен как DWORD (typedef DWORD COLORREF) или, что то же самое unsigned long. Под переменную типа COLORREF отводится 32 бита и RGB цвет представляется следующим образом: xxbbggrr, где rr,gg и bb – байт компонент красного, синего и зеленого цвета соответственно. Байт xx не используется. Для конструирования цвета в модели RGB по значениям компонент основных цветов можно использовать макрос RGB(r,g,b), который определен следующим образом: #define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))). Пример конструирования цвета: BYTE green = 128; BYTE red = 255; BYTE blue = 50; COLORREF myColor = RGB(red,green,blue); Цвета CMYK представляются тоже с помощью COLORREF в следующем виде: ccmmyykk. Для конструирования цвета CMYK и получения его компонент предусмотрены макросы, аналогичные приведенным выше.
Некоторые графические библиотеки, например, OpenGL позволяют задавать степень прозрачности (transparency) поверхностей. В этом случае цвет задается не тройкой, а четверкой координат (RGB), где (альфа-канал) – число (обычно в диапазоне от 0 до 1) определяющее степень видимости поверхностей, находящихся за данной. В OpenGL значению 1 соответствует полная непрозрачность, а значению 0 –полная прозрачность (невидимость) поверхности (в других системах может быть по-другому). Для хранения дискретизированного значения обычно используется свободный байт в 32-битном представлении 24-разрядного RGB цвета, например, bbggrr. Расчет итогового RGB-изображения с учетом значения каждого пиксела называется альфа-смешением (alpha blending) и выполняется либо программно средствами графической библиотеки, либо аппаратно средствами графического ускорителя. Существуют различные формулы для расчета альфа-смешения. Некоторые из них приведены в [Попов]. Альфа-смешение позволяет повысить реалистичность создаваемых изображений, используется при наложении текстур, устранении лестничного эффекта, создании эффектов тумана, полупрозрачности, отражения и т.д. Описывать субъективное восприятие цвета в рамках аппаратно-ориентированных моделей RGB и CMY не всегда удобно. Цвет часто характеризуется в терминах насыщенности (Saturation), цветового тона (Hue), яркость (Brightness). Тон отвечает за то, что объект кажется окрашенным в чистый (спектральный) цвет или комбинацию двух спектральных цветов. Для ахроматического цвета тон не определен. Насыщенность (разбел) определяет количество белового цвета, примешенного к наблюдаемому хроматическому цвету. Хроматические цвета имеют максимальную насыщенность. Насыщенность серого цвета равна 0. Уменьшению яркости, с точки зрения художника, соответствует добавление к цвету черной краски. HSV (Hue, Saturation, Value - цветовой тон, насыщенность, количество света или светлота) - модель, ориентированная на человека и обеспечивающая возможность явного задания требуемого оттенка цвета (см. Рис.). Множество допустимых цветов представляет собой перевернутую шестигранную пирамиду, основание которой представляет собой плоское сечение куба RGB, проведенное через серединные перпендикуляры к черно-белой диагонали. По вертикальной оси задается V - светлота, меняющаяся от 0 до 1. Значению V = 0 соответствует вершина пирамиды, значению V = 1 - основание; цвета при этом наиболее интенсивны. Цветовой тон H задается углом, отсчитываемым вокруг вертикальной оси. В частности, 0 - красный, 60 - желтый, 120 - зеленый, 180 - голубой, 240 - синий, 300 - пурпурный, то есть дополнительные цвета расположены друг против друга (отличаются на 180). Насыщенность S определяет насколько близок цвет к "чистому" пигменту и меняется от 0 на вертикальной оси V до 1 на боковых гранях шестигранной пирамиды. Точка V = 0, в которой находится вершина пирамиды, соответствует черному цвету. Значение S при этом может быть любым в диапазоне 0-1. Точка с координатами V = 1, S = 0 - центр основания пирамиды - соответствует белому цвету. Промежуточные значения координаты V при S=0, то есть на оси пирамиды, соответствуют серым цветам. Если S = 0, то значение оттенка H считается неопределенным.
|