Шаг 190.
Библиотека Qt.
Цветовая модель RGB

    На этом шаге рассмотрим модель RGB.

    Наиболее чувствителен глаз к зеленому цвету, потом следует красный, а затем — синий. На этих трех цветах и построена модель RGB (Red, Green, Blue — красный, зеленый, синий).

    Пространство цветов задает куб, длина ребер которого равна 255 (рис. 1) в целочисленном представлении (либо единице в вещественном представлении).


Рис.1. Цветовая модель RGB

    Файлы приложения, иллюстрирующего цветовую модель RGB, можно взять здесь.

    Как видно из рис. 1, цвет задается сразу тремя параметрами. Первый параметр задает оттенок красного, второй — зеленого, а третий — оттенок синего цвета. Диагональ куба, идущая от черного цвета к белому — это оттенки серого цвета. Диапазон каждого из трех значений может изменяться в пределах от 0 до 255 (либо от 0 до 1 в вещественном представлении), где 0 означает полное отсутствие оттенка цвета, а 255 — его максимальную насыщенность.

    Эта модель является "аддитивной", т. е. посредством смешивания базовых цветов в различном процентном соотношении можно создать любой нужный цвет. Смешав, например, синий и зеленый, мы получим голубой цвет.

    Для создания цветового значения RGB нужно просто передать в конструктор класса QСolor три значения. Каналы цвета класса QColor могут содержать необязательный уровень прозрачности, значение для которого можно передавать в конструктор четвертым параметром. В первый параметр передается значение красного цвета, во второй — зеленого, в третий — синего, а в четвертый — уровень прозрачности. Например:

QColor colorBlue(0, 0, 255, 128);

    Получить из объекта QColor каждый компонент цвета возможно с помощью методов red(), green(), blue() и alpha(). Эти же значения можно получить и в вещественном представлении. Для этого нужно вызвать: redF(), greenF(), blueF() и alphaF(). Можно вообще обойтись одним методом getRgb(), в который передаются указатели на переменные для значений цветов, например:

QColor color(100, 200, 0);
int r, g, b;
color.getRgb(&r, &g, &b);

    Для записи значений RGB можно, по аналогии, воспользоваться методами, похожими на описанные, но имеющими префикс set (вместо префикса get, если он есть), после которого идет заглавная буква. Также для этой цели можно прибегнуть к структуре данных QRgb, которая состоит из четырех байтов и полностью совместима с 32-битным значением. Эту структуру можно создать с помощью функции qRgb() или qRgba(), передав в нее параметры красного, зеленого и голубого цветов. Но можно присваивать переменным структуры QRgb и 32-битное значение цвета. Например, синий цвет устанавливается сразу несколькими способами:

QRgb rgbBlue1 = qRgba(0, 0, 255, 255); // С информацией о прозрачности
QRgb rgbBlue2 = qRgb(0, 0, 255);
QRgb rgbBlue3 = 0x000000FF;

    При помощи функций qRed(), qGreen(), qBlue() и qAlpha() можно получить значения цветов и информацию о прозрачности соответственно.

    Значения типа QRgb можно передавать в конструктор класса QColor или в метод setRgb():

QRgb rgbBlue = 0x000000FF;
QColor colorBlue1(rgbBlue);
QColor colorBlue2;
colorBlue2.setRgb(rgbBlue);

    Также можно получать значения структуры QRgb от объектов класса QColor вызовом метода rgb(). Цвет можно установить, передав значения в символьном формате, например:

QColor colorBlue1("#0000FF");
QColor colorBlue2;
colorBlue2.setNameColor("#0000FF");

    На следующем шаге рассмотрим цветовую модель CMYK.




Предыдущий шаг Содержание Следующий шаг