Как получить значение цвета QColor :: greenF точно между 0 и 1 вместо округления? - PullRequest
0 голосов
/ 01 июля 2018

У меня есть значение QColor, и мне нужно разбить его на составляющие RGB между 0 и 1, используя только одно значение после десятичной точки.
Например: Orange color это

QColor color = QColor(255,128,0)
qreal green = color.greenF();
qDebug() << green; //0.501960784

Принимая во внимание, что зеленый компонент должен быть 0.6. То есть это rgb value is (255,128,0) or (1,0.6,0).

Как получить 0.6 вместо 0.501960784?

1 Ответ

0 голосов
/ 02 июля 2018

А вот оранжевый цвет 255,128,0

Не существует такого понятия, как "оранжевый" цвет. Все называют что-то еще, используя одно и то же слово. Оранжевый не цвет , это диапазон оттенков . Эти оттенки становятся цветами, когда вы назначаете им некоторую насыщенность и яркость. Существует множество цветов, которые можно представить, используя тройку R, G, B по 8 бит на компонент, все они имеют оранжевый оттенок и, таким образом, квалифицируются как и оранжевый. Там нет оранжевый,

Принимая во внимание, что зеленый компонент должен быть 0,6. То есть его значение rgb равно (255,128,0) или (1,0,6,0).

Это не так. QColor говорит вам об этом, и базовая математика говорит вам об этом. Цвет ясно равен 1/0.6/0, или 1*255, 6/10*255, 0*255, или 255, 1530/10, 0, или 255, 153, 0 , точно . Это никогда не будет 255,128,0, и я понятия не имею, кто вам это сказал, но они были неправы.

Так что все очень просто: забудь обо всем. Просто используйте QColor::redF, greenF и blueF. Они работают так, как должны.

О, и вы даже не упомянули слонов в комнате, которые являются цветовыми пространствами. Тройка RGB не имеет физического смысла - она ​​полностью абстрактна - пока вы не отобразите ее в физическое цветовое пространство. И вам лучше использовать откалиброванные устройства вывода, чтобы согласовать выбор цвета с пользователем, иначе это будет бесконечная глупость вокруг.

...