Existe um método convencional para inverter os valores do NSColor?

Estou procurando uma maneira de inverter arbitrariamenteNSColor valores em tempo de execução e não parece haver nenhum método interno para fazer isso.

Vou usar uma categoria para estenderNSColor do seguinte modo:

NSColor * invertedColor = [someOtherColor inverted];

Aqui está o protótipo do método de categoria que estou usando:

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

Alguém pode preencher os espaços em branco? Isso não precisa ser perfeito, mas eu gostaria que fizesse algum sentido. ou seja:

[[[NSColor someColor] inverted] inverted] resultaria em uma cor muito próxima da cor original

[[NSColor whiteColor] inverted] estaria muito perto de[NSColor blackColor]

As cores invertidas estariam em lados opostos doroda de cores. (vermelho e verde, amarelo e violeta etc.)

O valor alfa deve permanecer o mesmo que o originalNSColor. Eu só estou olhando para inverter ocor, não a transparência.

ATUALIZAÇÃO 3: (agora em cores!)

Acontece que usando umcor complementar (uma cor com um matiz a 180 ° do matiz original) não é suficiente, pois branco e preto não têm realmente um valor de matiz. A partir da resposta fornecida porphoebus, é isso que eu criei:

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]];

O tom ainda é girado em 180 °, mas também inverto o componente de brilho para que cores muito escuras se tornem muito brilhantes (e vice-versa). Isso cuida dos casos em preto e branco, mas inverte quase todas as cores em preto (o que viola minha regra de dupla inversão). Aqui estão os resultados:

amostra de cor # 1 http://img29.imageshack.us/img29/8548/invert1.jpg

Agora,A abordagem de Peter Hosey é muito mais simples e produz melhores resultados:

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

amostra de cor # 2 http://img29.imageshack.us/img29/1513/invert2.jpg

no Swift 4.2:

extension NSColor {

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

questionAnswers(3)

yourAnswerToTheQuestion