首页 > 解决方案 > 如何让 QColor::greenF 颜色值恰好在 0 和 1 之间而不是四舍五入?

问题描述

我有一个QColor值,我需要将其分解为 0 到 1 之间的 RGB 分量,小数点后只有一个值。
例如: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

标签: c++qtrgbqcolor

解决方案


但是橙色是 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, 0255, 153, 0 完全。永远不会255,128,0,我不知道是谁告诉你的,但他们错了。

所以这很简单:忘记这一切。只需使用QColor::redF,greenFblueF。他们以应有的方式工作。

哦,你甚至没有提到房间里的大象是色彩空间。RGB 三元组没有物理意义——它完全是抽象的——直到你将它映射到物理色彩空间。你最好使用校准的输出设备来将你的颜色选择与用户联系起来,否则周围将是无穷无尽的愚蠢。


推荐阅读