可可 – 是否有一种常规的反转NSColor值的方法?

可可 – 是否有一种常规的反转NSColor值的方法?,第1张

概述我正在寻找一种在运行时反转任意 NSColor值的方法,而且似乎没有任何内置方法。 我将使用类别来扩展NSColor,如下所示: NSColor * invertedColor = [someOtherColor inverted]; 这是我使用的类别方法原型: @implementation NSColor (MyCategories)- (NSColor *)inverted{ N 我正在寻找一种在运行时反转任意 NSColor值的方法,而且似乎没有任何内置方法。

我将使用类别来扩展NScolor,如下所示:

NScolor * invertedcolor = [someOthercolor inverted];

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

@implementation NScolor (MyCategorIEs)- (NScolor *)inverted{    NScolor * original = [self colorUsingcolorSpacename:                      NSCalibratedRGBcolorSpace];    return ...?}@end

有人可以填空吗?这不一定是完美的,但我希望它有一定的意义。即:

> [[[NScolor somecolor] inverted] inverted]会导致颜色非常接近原始颜色
> [[NScolor whitecolor] inverted]将非常接近[NScolor blackcolor]
>倒置的颜色将在color wheel的对面(红色和绿色,黄色和紫色等)

Alpha值应保持与原始NScolor相同。我只是想反转颜色,而不是透明度。

更新3 :(现在颜色!)

事实证明,使用complementary color(一种颜色与原始色调相距180度的色调)不够,因为白色和黑色的色彩值并不是很好。从phoebus提供的答案开始,这是我想出的:

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 http://img29.imageshack.us/img29/8548/invert1.jpg

现在,Peter Hosey’s approach要简单得多,效果更好:

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

解决方法 简单:组件都是0-1,所以从1中减去每个组件以获得补码的值。

例子:

红色= 1,0,0; complement = 0,1,1 =青色
黄色= 1,1,0; complement = 0,1 = blue
>白= 1,1; complement = 0,0 =黑色
深橙色= 1,0.25,0; complement = 0,0.75,1 =天蓝色

你可以猜到,这是一个对称的 *** 作。反转逆将使您准确的开始使用的颜色。

总结

以上是内存溢出为你收集整理的可可 – 是否有一种常规的反转NSColor值的方法?全部内容,希望文章能够帮你解决可可 – 是否有一种常规的反转NSColor值的方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1038048.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存