【问题标题】:Get MidColor from UIColor从 UIColor 获取 MidColor
【发布时间】:2014-06-15 00:07:15
【问题描述】:

我正在寻找通过 UIColor 为我提供中间颜色的样本。在下面的 例如,Get Slightly Lighter and Darker Color from UIColor
可以从 UIColor 获得更浅和更深的颜色。 但我需要从 UIColor 获得平均/中间颜色。

有人帮我解决这个问题吗? 提前致谢。

【问题讨论】:

  • 中间色是什么意思?
  • 既不是深色也不是浅色..我想要的中间颜色
  • 举例说明。

标签: ios uicolor


【解决方案1】:

您指向的代码在第一个代码示例中将颜色向上或向下步进 0.2,并在第二个代码示例中调整亮度。

我认为中间色是指以下两种情况之一:(1) 颜色本身,或 (2) 不像示例代码那样浅或深的东西。要实现后者,您需要做的就是更改亮度乘数,例如

@implementation UIColor (LightAndDark)

- (UIColor *)lighterColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:MIN(b * 1.15, 1.0)
                               alpha:a];
    return nil;
}

- (UIColor *)darkerColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:b * 0.85
                               alpha:a];
    return nil;
}
@end

还是您正在寻找两种颜色之间的颜色?现在正在处理这个问题,很快就会再次编辑。

更新:获得中间色使用:

- (UIColor *)betweenColor:(UIColor *)c andColor:(UIColor *)d
{
    CGFloat r, g, b, a;
    CGFloat r2, g2, b2, a2;
    [c getRed:&r green:&g blue:&b alpha:&a];
    [d getRed:&r2 green:&g2 blue:&b2 alpha:&a2];

    return [UIColor colorWithRed:(r + r2)/2
                           green:(g + g2)/2
                            blue:(b + b2)/2
                           alpha:a];
    return nil;
}

然后这样称呼它:

UIColor *midColor = [self betweenColor:[UIColor whiteColor] andColor:[UIColor blackColor]];
self.view.backgroundColor = midColor;

这是 HSB 中点:

- (UIColor *)betweenColor:(UIColor *)c andColor:(UIColor *)d
{
    CGFloat h, s, b, a;
    CGFloat h2, s2, b2, a2;
    [c getHue:&h saturation:&s brightness:&b alpha:&a];
    [d getHue:&h2 saturation:&s2 brightness:&b2 alpha:&a2];
    return [UIColor colorWithHue:(h+h2)/2
                      saturation:(s+s2)/2
                      brightness:(b+b2)/2
                           alpha:a];    return nil;
}

【讨论】:

  • 是的,我也遵循相同的方式..但没有得到预期的结果。 -(UIColor *)middleColorForColor:(UIColor *)iColor { CGFloat h, s, b, a; UIColor *midColor = nil; if ([iColor getHue:&h 饱和度:&s 亮度:&b alpha:&a]) midColor = [UIColor colorWithHue:h 饱和度:s 亮度:b * 0.65 alpha:a]; [self.middleColorView setBackgroundColor:midColor];返回中间颜色; }
  • 如果我发送最深和最浅的颜色,是否可以获得平均颜色?
  • 是这些解决方案之一还是其​​他?如果还有什么,请分享。
  • 是的,你写的颜色方法知道......同样的方式。我正在取 RGB 值的平均值:)
猜你喜欢
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2011-08-24
相关资源
最近更新 更多