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

У меня есть 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 ответ

Решение

Но Оранжевый цвет 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 не имеет физического смысла - она ​​полностью абстрактна - пока вы не отобразите ее в физическое цветовое пространство. И вам лучше использовать откалиброванные устройства вывода, чтобы согласовать ваш выбор цвета с пользователем, иначе это будет бесконечная глупость вокруг.

Другие вопросы по тегам