Цветовое разрешение. Представление цвета в системах программирования для 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. Уменьшению яркости, с точки зрения художника, соответствует добавление к цвету черной краски.
|