На этом шаге мы рассмотрим работу с цветом.
VPI использует цветовую модель RGB, которая позволяет работать с 16 миллионами цветов. Вы составляете необходимый цвет из трех значений, определяющих компоненты красного (Red) (от 0 до 255), зеленого (Green) (от 0 до 255) и голубого (Blue) (от 0 до 255).
В противоположность субтрактивному (subtractive) закрашиванию, при котором каждый добавляемый цвет перекрывает предыдущий, существует и аддитивное (additive) закрашивание с использованием цвета, получаемого сложением значений интенсивности для каждого из основных цветов: красного, зеленого и синего. Например, если минимальная интенсивность на данном экране была определена как 0, а максимальная - как 255, то белый пиксель будет задаваться RGB-тройкой (255,255,255), черный пиксель - тройкой (0,0,0) и голубой пиксель - тройкой (0,255,255).
Количество воспроизводимых цветов зависит от видеоадаптера и принтера. Черно-белый принтер выполняет печать в черно-белом цвете, а видеокарта, возможно, воспроизводит только 16 цветов. Однако программное обеспечение GUI предусматривает более сложные цветовые схемы и составы, поэтому если вы попытаетесь нарисовать 2000 прямоугольников разного цвета, то GUI сможет распределять цвета и пиксели в этих прямоугольниках так, чтобы приблизиться к 2000 различных цветов. В черно-белых устройствах для отображения полутонов используются оттенки серого цвета.
Для обеспечения дополнительной гибкости в цветовой гамме также применяется технология палитры. Цветовые палитры используются устройствами, которые способны порождать множество цветов, но в данный момент времени отображают только часть из них. Палитра - массив цветов, используемых в изображении. Она позволяет определить каждый цвет заданием его компонентов. Если видеокарта одновременно поддерживает, например, 256 цветов, это означает, что она может правильно отображать только 256 цветов, а палитра определяет, какие из 256 цветов могут быть отображены. Система управления окнами имеет одну глобальную системную палитру, а каждое окно может иметь локальную палитру. Система управления окнами старается отображать цвета в активном окне как можно правильнее. Это делает возможным, например, установить 200 из 256 доступных цветов видеокарты в различные оттенки синего, в сочетании с другими 56 цветами, доступными для других окон на экране.
Забота об обработке цвета ложится на аппаратные средства: чем они лучше, тем лучше внешний вид экрана. За исключением отображения многоцветных рисунков, программист может выбрать любой цвет для элементов GUI. Однако из-за вышеупомянутого ограничения на количество одновременно используемых цветов, а также для обеспечения переносимости на различные компьютеры, будет полезным ограничиться использованием цветов, определенных в таблице 1.
Идентификатор цвета | Цвет | Значение (B-G-R) |
---|---|---|
color_Red | Красный | 0x0000FF |
color_Green | Зеленый | 0x00FF00 |
color_Blue | Синий | 0xFF0000 |
color_Cyan | Голубой | 0xFFFF00 |
color_Magenta | Фиолетовый | 0xFF00FF |
color_Yellow | Желтый | 0x00FFFF |
color_Black | Черный | 0x000000 |
color_DkGray | Темно-серый | 0x404040 |
color_Gray | Серый | 0x808080 |
color_LtGray | Светло-серый | 0xC0C0C0 |
color_White | Белый | 0xFFFFFF |
Если вы хотите, чтобы приложение хорошо смотрелось при использовании черно-белого оборудования, используйте цвета color_Black, color_DkGray, color_Gray, color_LtGray и color_White. Для того чтобы проверить, поддерживается ли данный цвет аппаратным обеспечением компьютера, нужно использовать атрибут attr_have_color в предикате vpi_GetAttrVal. Кроме того, убедитесь, что цвета имеют достаточно большой контраст, чтобы соседние цвета не сливались в один.
Предикат:
Color=vpi_ComposeRGB(Red,Green,Blue)
может использоваться для создания цвета из основных цветов: красного, зеленого и синего. Яркость каждого основного цвета определена целым числом, но значимыми являются только 8 младших битов, давая диапазон от 0 до 255.
Стандартный предикат:
Color=dlg_ChooseColor(color OldColor)
позволяет пользователю выбрать любой из возможных цветов.
На следующем шаге мы рассмотрим системы координат.