質問

を探していなければならないというニーズを反転させ任意の 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. 反転色が反対側にあり カラーホイール.(レッド&グリーン、イエローとオレ等)

アルファ値は引き続きそうあるべきであるとは NSColor.私だけにして倒立(上下反転)して , なので、透明性を有する。

更新3: (現在の色!)

ここで示されているデータを用い 補色 (色と色相を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

現在、 ピーター 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、subtract各コンポーネントから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のの中で補完についてStackOverflowの質問です。おそらく、コードの一部が適応可能である?

ここには、いくつかありますカラーはココア色空間にして加工することができるさまざまな方法についての興味深いと潜在的に有用な情報。あなたはHSV色空間を使用することができるかどうかの色合いが完全な円ではカラーホイールの周りに定義されているので、それはここでどのように見えることから、その後、色の補数は、単にhue > 179 ? hue -= 180 : hue = += 180を取ることによって見つけることができます。

ここでカスタムセッター(!アルファが反転しない)といくつかのonelinerです

-(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