我生成随机的uicolor。我想避免像黄色,浅绿色等浅色......这是我的代码
+ (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背景色。 Cell的textLabel颜色为白色。因此,如果背景颜色为浅绿色或其他一些浅色,则不能清晰显示...
如何解决这个问题?我们可以避免产生浅色,还是可以找到浅色?
如果我们发现它是浅色的意味着我可以将textcolor更改为其他颜色......
答案 0 :(得分:0)
听起来你想避免接近白色的颜色。由于您已经在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;
}
答案 1 :(得分:0)
浅色是具有高亮度(或亮度,亮度......)的颜色。
生成具有随机色调和饱和度的颜色,但将亮度的随机性限制为较低的数字,如0到0.5。或保持亮度不变。如果您并排显示颜色,如果您只更改HSB中的3个组件中的2个(HSV,HSL),则美学影响通常会更好