2009-12-21 6 views

Répondre

16

par la NSColor documentation:

NSColor *myColor = [NSColor colorWithCalibratedRed:redValue green:greenValue blue:blueValue alpha:1.0f]; 
+3

Vous devez utiliser 1.0f au lieu de 1,0, 1,0 est un double, ce qui est un type natif pour l'iPhone. – nash

+0

Vous avez raison - les dangers du code de frappe rapidement! –

+4

Cela vaut probablement la peine de préciser que les valeurs de couleur vont de 0.0 à 1.0. En outre, la version "calibrée" est en effet plus que probablement la variante correcte de cette méthode à utiliser. Vous voulez utiliser l'espace NSCalibratedRGBColorSpace (qui correspond à [NSColorSpace genericRGBColorSpace]) dans toutes les relations internes avec les couleurs. N'utilisez que les variantes d'espaces colorimétriques "périphérique" lors de la sortie vers un périphérique spécifique connu. – Kelan

3
float red = 0.5f; 
float green = 0.2f; 
float blue = 0.4f; 
float alpha = 0.8f; 

NSColor *rgb = [NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; 
8

Aussi ne pas oublier de faire la conversion suivante à partir des valeurs RVB réelles que vous obtenez, permet de dire à partir de Photoshop ...

RGB de (226, 226, 226) peut être instancié en tant que NSColor en utilisant les valeurs:

Red: 226/255 = 0.886... 
Green: 226/255 = 0.886... 
Blue: 226/255 = 0.886... 

[NSColor colorWithDeviceRed:0.886f green:0.886f blue:0.886f alpha:1.0f]; 

Pourquoi 255? Les canaux de couleur 8 bits vont de 0 à 255 (inclus). Une fois normalisée, elle est mise à l'échelle de la plage [0,1] (inclus). Voir les références pour les conversions de valeurs normalisées en valeurs non normalisées et vice versa.

Références

+2

Cela pourrait être évident pour tout le monde, mais pourquoi le +1? Est-ce juste parce que 256 est un nombre plus agréable à diviser avec, plus de facteurs, donc moins d'erreurs d'arrondi/points décimaux? –

+0

Cette réponse est légèrement fausse. Les valeurs de couleur RVB 8 bits vont de 0 à 255, soit 256 valeurs au total. Ainsi, la façon correcte de mapper des valeurs RVB allant de 0 à 1 est de diviser par 255, c'est-à-dire: «rouge = 226/255». L'ajout du 1 bizarre et du divisant par 256 donne des résultats très similaires mais légèrement incorrects, que vous pouvez vérifier en considérant ce qui se passerait si une composante couleur était 0: zéro divisé par 255 est toujours zéro, mais '(0 + 1)/256'> 0. – davidf2281

-2

Extension pour Swift 2

extension NSObject { 
    func RGB(r:CGFloat, g:CGFloat, b:CGFloat, alpha:CGFloat? = 1) -> NSColor { 
     return NSColor(red: r/255, green: g/255, blue: b/255, alpha: alpha!) 
    } 
} 

Ensuite, il suffit d'appeler

RGB(r: 16, g: 105, b: 125) 

ou

RGB(r: 16, g: 105, b: 125, alpha: 0.5) 
+0

Pourquoi créer une extension de NSObject et non de NSColor? – ColdGrub1384

+0

Je préfère simplement écrire RGB (... – emreoktem

+0

mais si vous créez une extension de NSObject, vous devez appeler la fonction comme ceci: NSObject().RGB (_:, g :, b :) ou toute sous-classe NSObject – ColdGrub1384