如何获取随机的UIColor,但将其限制为颜色子集?

5
我知道如何获取随机的UIColor,但我想知道是否存在仅返回具有特定质量的颜色的方法。我不知道是否存在特定的术语,但例如,我只需要获取不透明的颜色、暗色调……适合具有明亮文本/图像背景的颜色。
我可以手动挑选一些,但在我的情况下,我想为大量图标背景提供非常好的默认值。
更新:
我的解决方案基于这里的答案:
float r = arc4random() % 12; 

return [UIColor colorWithHue:(30*r)/360 saturation:0.5f brightness:0.8f alpha:1.0f];

我得到了一个非常短的可能答案列表,但这给了我一个很好的起点。

2个回答

1

使用随机颜色作为背景确实是一个次优的解决方案,因为它会导致文本和图标信息的可见性和可读性问题。目前有一些研究正在进行中,旨在自动找到与前景颜色匹配的适当颜色,从而在视觉感知方面产生和谐的结果。请查看http://cs.nyu.edu/~sorkine/ProjectPages/Harmonization/


这是一个非常不错的项目! - aardvarkk
是的,它是。它特别适用于为已经存在的前景创建一个漂亮的匹配背景。这将使图像看起来和谐。 - KillerInsect
项目页面已移至此处:http://www.igl.ethz.ch/projects/color-harmonization/ - livingtech

1
我会使用HSV/HSL颜色空间,然后将结果转换为RGB。保持一个恒定的值和饱和度(S和V),其质量您喜欢,然后改变所需颜色数量的色相(H)值。将结果转换为RGB,您将拥有一组漂亮的颜色,看起来很搭配。您可以通过选择适合您需要的S和V的好组合来创建任何一组漂亮的颜色,例如“饱和”,“明亮”,“暗淡”等。
请参阅此维基页面以了解有关将HSV转换为RGB的讨论。我建议您从饱和度(S)为0.5和值(V)为0.8开始。然后,为了生成漂亮的颜色,请对H值为0、30、60、90...一直到360进行HSV->RGB转换。它将生成一组漂亮的调色板,看起来很搭配。稍后,如果您想要不同的颜色“品质”,可以调整S和V值。

好的,我对图形没有太多经验,所以你是说我得到一个手动挑选的列表,然后改变它的S和V吗? - mamcx
@mamcx 我添加了一个相关的维基链接,用于描述从HSV到RGB的转换。 - aardvarkk
1
我仍然不明白为什么需要转换为RGB。我的做法是:float r = arc4random() % 12; return [UIColor colorWithHue:(30*r)/360 saturation:0.5f brightness:0.8f alpha:1.0f]; - mamcx
@mamcx 当然可以 - 没问题。我不是iPhone开发者,所以我试图从高层次上为您提供解决方案。如果您已经找到适合自己的解决方案,那太好了! - aardvarkk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接