这是我多次伪解的东西,从来没有找到解决方案.
问题是想出一种生成N颜色的方法,尽可能区分N参数.
当混合蓝色和黄色涂料时,结果是某种绿色.
我有两种颜色:
blue =(0,0,255)
和黄色=(255,255,0)
找到混合两种颜色的结果的rgb颜色的算法是什么,就像使用涂料时一样?算法产生的颜色不一定非常精确.对于上面的例子,它只需要看起来像某种绿色.
提前致谢.
编辑:这个用Go编写的函数,根据LaC的回答为我工作.
func paintMix(c1, c2 image.RGBAColor) image.RGBAColor {
r := 255 - ((255 - c1.R) + (255 - c2.R))
g := 255 - ((255 - c1.G) + (255 - c2.G))
b := 255 - ((255 - c1.B) + (255 - c2.B))
return image.RGBAColor{r, g, b, 255}
}
Run Code Online (Sandbox Code Playgroud)
编辑#2 Allthought它设法混合青色和黄色,蓝色和黄色之间的混合变成黑色,这似乎不对.我还在寻找一种有效的算法.
编辑#3这是Go中一个完整的工作示例,使用HLS颜色空间:http://go.pastie.org/1976031.谢谢Mark Ransom.
编辑#4看起来更好的颜色混合的前进方式是使用Kubelka-Munk方程
我从这些链接中得到了一些参考 -
我已经经历了"HSV色彩空间"的概念.但我想借助于使用RGB绘制色轮CAGradientLayer.
这是使用简单的RGB颜色数组制作色轮的代码片段UIBezierPath-
func drawColorWheel()
{
context?.saveGState()
range = CGFloat(100.00 / CGFloat(colorArray.count))
for k in 0 ..< colorArray.count
{
drawSlice(startPercent: CGFloat(k) * range, endPercent: CGFloat(CGFloat(k + 1) * range), color: colorArray.object(at: k) as! UIColor)
}
context?.restoreGState()
}
func drawSlice(startPercent: CGFloat, endPercent: CGFloat, color: UIColor)
{
let startAngle = getAngleAt(percentage: startPercent)
let endAngle = getAngleAt(percentage: endPercent)
let path = getArcPath(startAngle: startAngle, endAngle: endAngle)
color.setFill()
path.fill()
}
Run Code Online (Sandbox Code Playgroud)
凡getAngleAt()和getArcPath()是私人活动的角度来绘制路径.
这是我的代码的最终输出 …
我希望生成与给定UIColor(Triadic,Analogues,Complement等)相符的颜色.
我读了很多像帖子这个和这个和这个.在上一篇文章中,回答者建议去easyrgb.com.所以我去了那里.我了解到,如果我想生成那些颜色方案,我需要在一定程度上"旋转"色调.例如,对于三重色,我需要将其旋转±120度.
我知道我可以通过调用获得颜色的色调getHue(:saturation:brightness:),但我怎么能"旋转"呢?方法返回的色调不是一个数字吗?0到1之间的数字?这对我没有意义!
我认为第一篇文章可能有答案,但代码是用python编写的.我只学了一点python,所以我不太清楚这意味着什么:
h = [(h+d) % 1 for d in (-d, d)] # Rotation by d
Run Code Online (Sandbox Code Playgroud)
从评论中,我看到这条线以某种方式将色调旋转了d度.但我不知道那种语法意味着什么.
任何人都可以告诉我如何旋转色调,或将上述代码转换为快速?
colors ×3
algorithm ×2
color-space ×2
ios ×2
go ×1
rgb ×1
swift ×1
swift3 ×1
uibezierpath ×1
uicolor ×1