у меня есть 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
?
Но Оранжевый цвет 255,128,0
Нет такого понятия, как «оранжевый» цвет. Каждый называет что-то еще, используя одно и то же слово. Оранжевый не цвет, это диапазон оттенки. Эти оттенки становятся цветами, когда вы назначаете им некоторую насыщенность и яркость. Существует множество цветов, которые можно представить с помощью тройки по 8 бит на компонент R, G, B, которые имеют оранжевый оттенок, и, таким образом, их можно квалифицировать как оранжевый. Нет никаких оранжевый,
В то время как зеленый компонент должен быть 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 не имеет физического смысла — она полностью абстрактна — пока вы не отобразите ее в физическое цветовое пространство. И вам лучше использовать откалиброванные устройства вывода, чтобы согласовать ваш выбор цвета с пользователем, иначе это будет бесконечная глупость вокруг.
Других решений пока нет …