Цвет и класс QColor

Автор: | 29 октября, 2022

Цветовая модель это спецификация в трехмерной или четырехмерной системы координат, которая задает все видимые цвета. В Qt есть поддержка трех цветовых моделей:

RGB (Red, Green, Blue — красный, зелёный, синий)

Цветовая модель RGB является зависимой от устройства. Поскольку мониторы разных моделей и производителей различаются, было предложено несколько стандартов цветовых пространств для этой модели. Например, sRGB является стандартом для изображения на мониторе (профиль «по умолчанию» для компьютерной графики).

RGB

CMYK (Cyan, Magenta, Yellow, Key — голубой, пурпурный, желтый и ключевой черный цвет)

Данный цветовая модель чаще всего используется в печати.

CMYK

HSV (Hue, Saturation, Value — тон, насыщенность, значение)

Hue — цветовой тон, (например, красный, зелёный или сине-голубой). Варьируется в пределах 0—360°. Задается углом в цветовом круге.

Saturation — насыщенность. Варьируется в пределах 0—100%. Чем ближе к 100% тем больше насыщенный цвет, который не содержит оттенки белого.

Value (значение цвета) или Brightness — яркость. Также задаётся в пределах 0—100%. Цвет с высокой интенсивностью — яркий, с низкой — темный.

HSV

Палитра

В 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Темно-желтый
Перечисление GlobalColor
GlobalColor

Рассмотрим класс 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() для установки.

Очень хороший пример конвертации находится здесь.