2016-05-18 3 views
2

J'ai créé NSWindow et j'ai rendu sa couleur de fond absolument bleue (# 0000FF). Mais quand la fenêtre est rendue, la couleur est "plus claire" qu'elle ne devrait l'être (# 0F3FFB).Swift - pourquoi NSColor devient plus léger lors du rendu

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


} 

Est-ce que quelqu'un sait pourquoi cela se passe et comment résoudre ce problème? (Capture d'écran jointe)

enter image description here

+0

Essayez 'NSColor.init (calibratedRed: vert: bleu: alpha:)' à la place. –

+0

@KenThomases non, toujours le même résultat – euvl

+3

Il est clair que les couleurs sont différentes, mais comment avez-vous déterminé exactement leurs valeurs? Ce mécanisme est-il sensible au profil de couleur? Quel profil dit-il qu'il a mesuré par rapport à? (Les valeurs de couleur sont réellement sans signification, sauf par rapport à un profil.) En outre, qu'avez-vous utilisé pour produire le fond (supposé) correct? –

Répondre

1

Ok, donc après quelques heures de jongler avec le code et @KenThomases aider, je me suis dit que si vous voulez que vos couleurs RVB correctement regarde NSImages et NSWindows, vous devez convertir dans NSDeviceRGBColorSpace espace de couleurs. Pour ce faire, j'ai écrit une fonction simple:

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) 
}