【发布时间】:2011-06-02 00:43:10
【问题描述】:
UIColor 中的色调与标准 RGB 色轮不同。我的意思是,色轮上两种相反的颜色会匹配(即黄色和紫色),但如果你在UIColor 中取两种相反的颜色,例如:
颜色 1:色相 0.45
颜色2:色相0.95
它们不匹配。有没有什么办法可以通过UIColor找到光谱中的反色?
【问题讨论】:
标签: objective-c cocoa-touch ios uicolor hsb
UIColor 中的色调与标准 RGB 色轮不同。我的意思是,色轮上两种相反的颜色会匹配(即黄色和紫色),但如果你在UIColor 中取两种相反的颜色,例如:
颜色 1:色相 0.45
颜色2:色相0.95
它们不匹配。有没有什么办法可以通过UIColor找到光谱中的反色?
【问题讨论】:
标签: objective-c cocoa-touch ios uicolor hsb
在轮子上彼此相对的颜色通常不称为“匹配”,它们被称为“互补”,例如,如果将它们混合在一起,则会得到白色(如果处理减色,则为黑色,即颜料)。
RGB 并不是真正的颜色“轮子”——它更像是一个立方体形状。但是,HSB 中的色调通常表示为一个角度,从 0˚ 到 360˚,0˚ 为红色,180˚ 为蓝绿色。如果你从你开始的任何地方取一个 180˚ 的值,你会得到补码:红色 0˚/绿松石色 180˚,绿色 120˚/紫色 300˚,等等。在编程时,色调范围通常写为之间的分数0 和 1 包括在内。在那个方案中,你可以做
fmod(val - 0.5, 1.0)
得到补码。
你还没有说你期望什么结果以及你得到什么结果,所以很难特别有帮助,但 0.95 和 0.45 确实是互补的,当我用这些值创建 UIColors 时,我看到了预期的微红色和绿松石色。
计算机屏幕上的颜色与油漆颜色的行为不同,因为在第一种情况下,您是adding wavelengths of light 来获得结果,而在第二种情况下,您是selectively absorbing wavelengths。这可能是你困惑的根源。红加黄等于有颜料的橙,红加绿等于有光的黄。
【讨论】:
我answered a question just like this 不是很久以前。它的要点是有很多不同的颜色模型。即使在您的问题中,您似乎也在考虑两种不同的模型:在红-黄-蓝模型中,黄色和紫色可能是互补的,但在红-绿-蓝模型中则不然。
【讨论】: