
我将使用类别来扩展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值的方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)