2016-05-18 19 views
2

Ich habe NSWindow erstellt und seine Hintergrundfarbe absolut blau gemacht (# 0000FF). Aber wenn das Fenster gerendert wird, ist die Farbe "heller" als es sein sollte (# 0F3FFB).Swift - warum NSColor heller wird, wenn es gerendert wird

class LilWindow: NSViewController { 
    override func viewDidLoad() { 
     self.view.window?.backgroundColor = 
      NSColor.init(red: 0, green: 0, blue: 1, alpha: 1) 


} 

Weiß jemand, warum es passiert und wie man das beheben kann? (Screenshot beigefügt)

enter image description here

+0

Versuchen Sie 'NSColor.init (kalibriertRot: grün: blau: alpha:)' stattdessen. –

+0

@KenThomases nein, immer noch das gleiche Ergebnis – euvl

+3

Es ist klar, die Farben sind unterschiedlich, aber wie genau haben Sie ihre Werte bestimmt? Ist dieser Mechanismus farbprofilabhängig? Welches Profil sagt es relativ zu? (Farbwerte sind eigentlich bedeutungslos, außer in Bezug auf ein Profil.) Was haben Sie auch verwendet, um den (angeblich) korrekten Hintergrund zu erzeugen? –

Antwort

1

Okay, also nach ein paar Stunden mit dem Code und @KenThomases Hantieren helfen, habe ich herausgefunden, dass, wenn Sie Ihre RGB-Farben wollen richtig schaut auf NSImages und NSWindows, Sie konvertieren müssen es in NSDeviceRGBColorSpace Farbraum. Um dies zu tun, habe ich eine einfache Funktion geschrieben:

func toScreenColor(color:NSColor) -> NSColor { 
    var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0 

    color 
    .colorUsingColorSpaceName(NSCalibratedRGBColorSpace)! 
    .getRed(&red, green: &green, blue: &blue, alpha: &alpha) 

    return NSColor(deviceRed: red, green: green, blue: blue, alpha: alpha) 
}