2015-10-05 2 views
2

Je tente de lire une liste de couleurs osx (.clr) et j'ai des difficultés à interpréter les valeurs de couleurs.Valeurs RVB de NSColor

contexte: J'écris un plugin de palette de couleurs pour un programme de conception appelé Sketch. Les plugins sont écrits en cocoascript, qui est un pont entre JS et Objective-C/Cocoa. Cela vous permet de travailler avec des classes comme NSColor

J'utilise ce code pour lire le fichier:

// Choose colorlist file ------------------------------------------ 

var openPanel = NSOpenPanel.openPanel(); 

openPanel.setCanChooseDirectories(true); 
openPanel.setCanChooseFiles(true); 
openPanel.setCanCreateDirectories(true); 
openPanel.setTitle("Choose a file"); 
openPanel.setPrompt("Choose"); 
openPanel.runModal(); 

// Read colors from file ------------------------------------------ 

var filePath = openPanel.URLs().firstObject().path(); 
var fileName = filePath.lastPathComponent().stringByDeletingPathExtension(); 

var colorList = NSColorList.alloc().initWithName_fromFile(fileName, filePath); 
var colorKeys = colorList.allKeys(); 
var color = colorList.colorWithKey(colorKeys[3]);  

log(color); 

Cela fonctionne et je suis en mesure d'enregistrer la couleur à l'application OS X Console. Le problème est que je ne suis pas sûr de savoir comment utiliser la sortie:

NSCalibratedRGBColorSpace 0.0599575 0.220776 0.562826 1 

la valeur RGBA en CSS, croquis, et Photoshop est

16, 77, 161, 1 

Je pensais que peut-être juste mis à l'échelle de l'ordre de 255 à 1. Mais quand je fais le calcul, il ne s'additionne pas totalement. La valeur b, par exemple:

0.562826 * 255 = 143.52063 

mais il devrait être 161.

Y at-il une autre façon je convertira la couleur?

+1

Pourquoi est-ce marqué Objective-C? Le code affiché n'est pas Objective-C. – rmaddy

+2

"valeur rgba dans Sketch et Photoshop est 16, 77, 161, 1" Les valeurs RVB sans profil de couleur sont presque entièrement inutiles. Vous devez savoir quel profil de couleur ces valeurs sont exprimées par rapport à afin de donner un sens à eux. Lisez ma réponse [ici] (http://stackoverflow.com/a/30053097/1312143) pour plus d'informations. –

+1

@rmaddy Sketch Les plugins sont rendus possibles par CocoaScript, un pont qui vous permet d'utiliser le code ** Objective-C/Cocoa ** à partir d'un script externe écrit en JavaScript. –

Répondre

0

Votre color est un objet NSColor, en NSCalibratedRGBColorSpace, qui correspond à l'espace colorimétrique RVB standard. Vous pouvez le convertir en valeurs entières par la méthode officielle.

https://developer.apple.com/library/mac/qa/qa1576/_index.html

Je transform que pour CocoaScript pour vous.

var red = color.redComponent() * 255.99999; 
var green = color.greenComponent() * 255.99999; 
var blue = color.blueComponent() * 255.99999;