我正在产生随机的颜色。我想避免浅色如黄色,浅绿色等.这是我的密码
+ (UIColor *)generateRandom {
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}我用这个做uitableviewcell背景色。细胞的textLabel颜色是白色的。所以如果背景颜色是浅绿色或其他浅色,那么它就看不清楚.
怎么解决这个问题?我们可以避免产生浅色,或者我们能找到哪种颜色是浅色?
如果我们能发现那是浅色意味着我可以把文字颜色换成其他颜色..。
发布于 2017-02-13 06:24:10
听起来你想避免接近白色的颜色。由于您已经在HSV空间,这应该是一个简单的问题,设置一个距离白色,以避免。一个简单的实现将限制饱和度和亮度不超过某个阈值。类似于:
if (saturation < kSatThreshold)
{
saturation = kSatThreshold;
}
if (brightness > kBrightnessThreshold)
{
brightness = kBrightnessThreshold;
}更复杂的方法是检查与白色的距离,如果距离太近,就把它推回去:
CGFloat deltaH = hue - kWhiteHue;
CGFloat deltaS = saturation - kWhiteSaturation;
CGFloat deltaB = brightness - kWhiteBrightness;
CGFloat distance = sqrt(deltaH * deltaH + deltaS * deltaS + deltaB * deltaB);
if (distance < kDistanceThreshold)
{
// normalize distance vector
deltaH /= distance;
deltaS /= distance;
deltaB /= distance;
hue = kWhiteHue + deltaH * kDistanceThreshold;
saturation = kWhiteSaturation + deltaS * kDistanceThreshold;
brightness = kWhiteBrightness + deltaB * kDistanceThreshold;
}发布于 2017-02-13 06:41:06
光色是指高亮度(或明度、光度.)的颜色。
生成具有随机色调和饱和度的颜色,但将亮度的随机性限制在较低的数字上,比如0到0.5。或者保持亮度不变。如果你并排显示颜色,如果你只改变HSB中的3种成分中的2种(HSV,HSL),其美学效果通常会更好。
https://stackoverflow.com/questions/42197644
复制相似问题