Цветовая модель это спецификация в трехмерной или четырехмерной системы координат, которая задает все видимые цвета. В Qt есть поддержка трех цветовых моделей:
RGB (Red, Green, Blue — красный, зелёный, синий)
Цветовая модель RGB является зависимой от устройства. Поскольку мониторы разных моделей и производителей различаются, было предложено несколько стандартов цветовых пространств для этой модели. Например, sRGB является стандартом для изображения на мониторе (профиль «по умолчанию» для компьютерной графики).
CMYK (Cyan, Magenta, Yellow, Key — голубой, пурпурный, желтый и ключевой черный цвет)
Данный цветовая модель чаще всего используется в печати.
HSV (Hue, Saturation, Value — тон, насыщенность, значение)
Hue — цветовой тон, (например, красный, зелёный или сине-голубой). Варьируется в пределах 0—360°. Задается углом в цветовом круге.
Saturation — насыщенность. Варьируется в пределах 0—100%. Чем ближе к 100% тем больше насыщенный цвет, который не содержит оттенки белого.
Value (значение цвета) или Brightness — яркость. Также задаётся в пределах 0—100%. Цвет с высокой интенсивностью — яркий, с низкой — темный.
Палитра
В Qt есть предопределенные цвета основных цветовых значений.
Константа | RGB-значение | HSV-значение | Hex | Описание |
Qt::black | (0, 0, 0) | (0°,0%,0%) | #000000 | Черный |
Qt::white | (255, 255, 255) | (0°,0%,100%) | #FFFFFF | Белый |
Qt::darkGray | (128, 128, 128) | (0°,0%,50%) | #808080 | Темно-серый |
Qt::gray | (160, 160, 164) | (240°,2.4%,64,3%) | #A0A0A4 | Серый |
Qt::lightGray | (192, 192, 192) | (0°,0%,75.3%) | #C0C0C0 | Светло-серый |
Qt::red | (255, 0, 0) | (0°,100%,100%) | #FF0000 | Красный |
Qt::green | (0, 255, 0) | (120°,100%,100%) | #00FF00 | Зеленый |
Qt::blue | (0, 0, 255) | (240°,100%,100%) | #0000FF | Синий |
Qt::cyan | (0, 255, 255) | (180°,100%,100%) | #00FFFF | Голубой |
Qt::magenta | (255, 0, 255) | (300°,100%,100%) | #FF00FF | Пурпурный |
Qt::yellow | (255, 255, 0) | (60°,100%,100%) | #FFFF00 | Желтый |
Qt::darkRed | (128, 0, 0) | (0°,100%,50%) | #800000 | Темно-красный |
Qt::darkGreen | (0, 128, 0) | (120°,100%,50%) | #008000 | Темно-зеленый |
Qt::darkBlue | (0, 0, 128) | (240°,100%,50%) | #000080 | Темно-синий |
Qt::darkCyan | (0, 128, 128) | (180°,100%,50%) | #008080 | Темно-голубой |
Qt::darkMagenta | (128, 0, 128) | (300°,100%,50%) | #800080 | Темно-пурпурный |
Qt::darkYellow | (128, 128, 0) | (60°,100%,50%) | #808000 | Темно-желтый |
Рассмотрим класс QColor поподробней. Объекты этого класса можно:
- Сравнивать;
- Присваивать;
- Создавать копии.
RBG
Для создания цветового значения RGB нужно передать в конструктор класса QColor передать три значения. Уровень прозрачности не обязательный параметр, он является четвертым параметром.
#include <QColor> QColor color (0,128,233,125);
Получить из объекта QColor каждый компонент цвета можно с помощью методов: red(), gree(), blue(), alpha(). Эти значения можно получить и в вещественном представлении (от 0 до 1): redF(), greeF(), blueF(), alphaF(). Можно обойтись одним методом: getRgb().
#include <QColor> #include <QDebug> QColor color (0,128,233,125); qDebug() << color.red(); qDebug() << color.green(); qDebug() << color.blue(); qDebug() << color.alpha(); qDebug() << color.redF(); qDebug() << color.greenF(); qDebug() << color.blueF(); qDebug() << color.alphaF(); int r,g,n,v; color.getRgb(&r, &g, &n, &v); qDebug() << r << g << n << v;
Получим следующий вывод:
0 128 233 125 0 0.501961 0.913725 0.490196 0 128 233 125
Для записи значений RGB можно также прибегнуть к структуре QRgb. Эту структуру можно задать с помощью функции qRgb() или qRgba() передав в нее уровень прозрачности. При помощи функций можно получить значения цветов: qRed(), qGreen(), qBlue(), qAlpha().
Значения типа QRgb можно передавать в конструктор QColor или методом setRgb(). Так же можно получить значение структуры QRgb от класса QColor вызвав метод rgb().
#include <QColor> QRgb rgb1 = qRgb(35,45,123); QRgb rgb2 = qRgba(56,34,76,34); QRgb rgb3 = 0x000000FF; QColor colorRgb (rgb1); QColor colorRgb1; colorRgb1.setRgba(rgb2); QRgb rgb0 = colorRgb.rgb(); QRgb rgb00 = colorRgb.rgba();
Цвет можно установить передав значение в символьном виде:
#include <QColor> QColor color ("#0000FF"); QColor color1; color1.setNamedColor("#0000FF");
HSV
Установка значений цвета в координатах HSV можно выполнить с помощью метода setHsv() или в вещественном представлении setHsvF()
#include <QColor> QColor color; color.setHsl(240,100,50); QColor color1; color1.setHslF(0.341667, 0.219608, 0.443137);
Для получения цветового значения в цветовой модели HSV адреса целочисленных значений или вещественных.
#include <QColor> QColor color; color.setHsv(240,100,50); QColor color1; color1.setHsvF(0.341667, 0.219608, 0.443137); int r,g,n,v; color.getHsv(&r, &g, &n, &v); double r1,g1,n1,v1; color.getHsvF(&r1, &g1, &n1, &v1);
CMYK
Установка цвета для данной модели осуществляется таким же образом как и для RGB и HSV. Класс QColor представляет методы getCmyk() и getCmykF() для получения значений и методы setCmyk() и setCmykF() для установки.
Очень хороший пример конвертации находится здесь.