【问题标题】:How get a random UIColor but restrict it to subset of the colors如何获得随机 UIColor 但将其限制为颜色的子集
【发布时间】:2011-10-01 11:10:58
【问题描述】:

我知道如何获得随机的 UIColor,但我想知道是否存在一种仅返回具有某种特定质量的颜色的方法。我不知道是否存在一个特定的术语,但例如,我只需要获得不透明的颜色、深色调...适合带有明亮文本/图像的背景的颜色。

我可以手动挑选一些,但就我而言,我想为大量图标背景提供一个非常好的默认值。

更新:

我的解决方案基于这里的答案:

float r = arc4random() % 12; 

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

我得到了一个非常小的可能答案列表,但这给了我一个好的开始。

【问题讨论】:

    标签: iphone cocoa-touch uikit uicolor


    【解决方案1】:

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

    【讨论】:

    • 这是一个非常棒的项目!
    • 是的。它对于为已经存在的前景创建一个很好的匹配背景特别有用。它会使图像看起来很和谐。
    • 项目页面已移至此处:igl.ethz.ch/projects/color-harmonization
    【解决方案2】:

    我要做的是使用 HSV/HSL 颜色空间,然后将结果转换为 RGB。保持一个恒定的值和饱和度(S 和 V),您喜欢其品质,然后根据您想要的颜色数量更改色调 (H) 值。将结果转换为 RGB,您将拥有一组看起来可以很好地协同工作的漂亮颜色。您可以根据自己的需要选择合适的 S 和 V 组合(低 V 是暗,高 V 是亮,低 S 是不饱和,高S是饱和的)。

    查看this wiki page,了解有关将 HSV 转换为 RGB 的讨论。我建议您从 0.5 的饱和度 (S) 和 0.8 的值 (V) 开始。然后,为了生成漂亮的颜色,对 H 值 0、30、60、90... 一直到 360 进行 HSV -> RGB 转换。它将生成一个很好的调色板,看起来很好。稍后,如果您想要不同的颜色“质量”,您可以调整 S 和 V 值。

    【讨论】:

    • 好吧,我没有太多的图形经验,所以你是说我得到一个手工挑选的列表,然后改变它的 S&V?
    • @mamcx 我添加了一个相关的 wiki 链接来描述从 HSV 到 RGB 的转换。
    • 我还是不明白为什么要转换成RGB。我这样做: float r = arc4random() % 12; return [UIColor colorWithHue:(30*r)/360 饱和度:0.5f 亮度:0.8f alpha:1.0f];
    • @mamcx 当然——行得通。我不是 iPhone 开发人员,所以我试图从高层次上为您提供解决方案。如果你找到了适合你的东西,那就太好了!
    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 2017-07-09
    • 2019-07-12
    • 2013-10-02
    • 2015-10-22
    • 2019-12-07
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多