Je cherche un moyen d'inverser NSColor valeurs arbitraires à l'exécution, et il ne semble pas y avoir de méthode intégrée pour le faire.Existe-t-il une méthode conventionnelle pour inverser les valeurs NSColor?
je vais utiliser une catégorie pour étendre NSColor
comme suit:
NSColor * invertedColor = [someOtherColor inverted];
Voici le prototype de la méthode de la catégorie que j'utilise:
@implementation NSColor (MyCategories)
- (NSColor *)inverted
{
NSColor * original = [self colorUsingColorSpaceName:
NSCalibratedRGBColorSpace];
return ...?
}
@end
Quelqu'un peut-il remplir les blancs? Cela ne doit pas nécessairement être parfait, mais j'aimerais que cela ait un sens. i.e. .:
[[[NSColor someColor] inverted] inverted]
se traduirait par une couleur très proche de la couleur originale[[NSColor whiteColor] inverted]
serait très proche de[NSColor blackColor]
couleurs inversées serait sur des côtés opposés de la color wheel. (Rouge vert &, jaune & violet, etc.)
La valeur alpha doit rester le même que le NSColor
d'origine. Je cherche seulement à inverser la couleur , pas la transparence.
MISE À JOUR 3: (! Maintenant en couleur)
Il se trouve que l'aide d'un complementary color (une couleur avec une teinte loin de la teinte d'origine 180 °) est pas tout à fait assez, parce que le blanc et le noir n'a pas vraiment de valeur de teinte. A partir de la réponse fournie par phoebus, ce que je suis venu avec:
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]];
La teinte est encore tourné de 180 °, mais j'inverser également la composante de luminosité afin que les couleurs très sombres deviennent très lumineux (et vice versa). Cela prend soin des cas en noir et blanc, mais il inverse à peu près toutes les couleurs au noir (ce qui viole ma règle de double inversion). Voici les résultats:
color swatch #1 http://img29.imageshack.us/img29/8548/invert1.jpg
Maintenant, Peter Hosey's approach est beaucoup plus simple, et il produit de meilleurs résultats:
return [NSColor colorWithCalibratedRed:(1.0 - [original redComponent])
green:(1.0 - [original greenComponent])
blue:(1.0 - [original blueComponent])
alpha:[original alphaComponent]];
color swatch #2 http://img29.imageshack.us/img29/1513/invert2.jpg
Refusé d'être simple à ce sujet :) – phoebus
Note: Pour le gris = 0.5, 0.5, 0.5; le complément est lui-même. – Pang