我在寻找一种方法来反转意 NSColor 值在运行时,并没有出现任何内在的方法这样做。

我将使用一个类别的扩展 NSColor 如下:

NSColor * invertedColor = [someOtherColor inverted];

这里是类别的方法的原型,我是使用:

@implementation NSColor (MyCategories)
- (NSColor *)inverted
{
    NSColor * original = [self colorUsingColorSpaceName:
                      NSCalibratedRGBColorSpace];
    return ...?
}
@end

任何人都可以填补空白?这并不是完美的,但我想它做一些有意义。即:

  1. [[[NSColor someColor] inverted] inverted] 会导致一个颜色非常接近于原来的颜色

  2. [[NSColor whiteColor] inverted] 将会是非常接近 [NSColor blackColor]

  3. 反转的色彩会上的相对侧面 颜色轮.(红色和绿色的、黄色和紫色,等等。)

Alpha值应保持原来的一样 NSColor.我只是想要颠倒 颜色, 不该透明度。

更新3: (现在的颜色!)

事实证明,使用 互补颜色 (a颜色色180°远离原始色)是不够的,因为白色和黑色的真的没有一个顺化价值。从提供的答案 太阳神, 这是我想出了:

CGFloat hue = [original hueComponent];
if (hue >= 0.5) { hue -= 0.5; } else { hue += 0.5; }
return [NSColor colorWithCalibratedHue:hue
                            saturation:[original saturationComponent]
                            brightness:(1.0 - [original brightnessComponent])
                                 alpha:[original alphaComponent]];

色调仍然是旋转180°,但我也反亮度件使得非常黑暗的颜色会变得非常明亮的(反之亦然)。这需要照顾的黑色和白色的情况,但它只是反对每一个颜色黑色的(这违反了我的双反规则)。这里是结果:

color swatch #1

现在, 彼得Hosey的方法 简单得多,并可以产生更好的结果:

return [NSColor colorWithCalibratedRed:(1.0 - [original redComponent])
                                 green:(1.0 - [original greenComponent])
                                  blue:(1.0 - [original blueComponent])
                                 alpha:[original alphaComponent]];

color swatch #2

在迅速4.2:

extension NSColor {

    func inverted() -> NSColor? {
        return NSColor(calibratedRed: 1.0 - redComponent,
                               green: 1.0 - greenComponent,
                               blue: 1.0 - blueComponent,
                               alpha: alphaComponent)
    }
} 
有帮助吗?

解决方案

简单:该部件是所有0-1,因此减去每个成分从1至得到补充的价值。

实例:

  • 红=1,0,0;补充=0,1,1=青
  • 黄色=1,1,0;补充=0,0,1=蓝色的
  • 白=1,1,1;补充=0,0,0=黑
  • 深橙色=1,0.25,0;补充=0,0.75,1=蓝色的天空

你可以猜测,这是一个对称的操作。相反会让你 到底 颜色了。

其他提示

从你所描述的,这听起来像是你真正想要的是一个功能找到一个颜色的补充,而不是其逆。相意味着不同的东西在这一方面起到举足轻重的作用。

这里有一个计算器问题,关于补充在JavaScript.也许一些代码是可适应的?

在这里, 是一些有趣和潜在的有用信息的各种方式,颜色可以用在可可粉色的空间。从什么它看起来喜欢这里,如果可以使用的单纯疱疹病毒的颜色空间,则该补充的一种颜色可能会发现通过简单的 hue > 179 ? hue -= 180 : hue = += 180, ,由于以色彩的定义是围绕颜色轮在一个完整的循环。

这里是一些oneliner定制定者(alpha不是颠倒!):

-(void)setReverseFontColor:(UIColor *)reverseFontColor {
     _reverseFontColor = [AppSingleStyle reversedColorFromOriginal:reverseFontColor];
}

+(UIColor*)reversedColorFromOriginal:(UIColor*)originalColor {
    return [UIColor colorWithRed:(1-CGColorGetComponents(originalColor.CGColor)[0]) green:(1-CGColorGetComponents(originalColor.CGColor)[1]) blue:(1-CGColorGetComponents(originalColor.CGColor)[2]) alpha:CGColorGetAlpha(originalColor.CGColor)];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top