2010-04-22 3 views
3

Quelqu'un peut-il me dire pourquoi ce colorUsingColorSpaceName renvoie nil? Par exemple, le bloc de code suivant affichera « deviceColor est Nill »:Impossible de convertir NSNamedColorSpace en NSDeviceRGBColorSpace?

NSColor *color = [NSColor windowBackgroundColor]; 
NSColor *deviceColor = [color colorUsingColorSpaceName: NSDeviceRGBColorSpace]; 
if(deviceColor == nil) NSLog(@"deviceColor is nill"); 

Comment puis-je convertir un NSColor dans le NSNamedColorSpace? Je dois être en mesure d'obtenir les composants de couleur afin que je puisse convertir un NSColor en CGColorRef

Répondre

6

Il est trop compliqué d'être exprimé comme une valeur RVB. C'est un objet unique qui dessine différemment lorsque la fenêtre est active ou inactive. Dans certains cas, c'est aussi une couleur de motif (c'est-à-dire une image en mosaïque) plutôt qu'un remplissage plat.

+0

Alors, comment puis-je obtenir les bonnes couleurs pour dessiner des composants personnalisés avec Core Graphics? – Bret

+2

Bret: utilisez '[NSColor windowBackgroundColor]'. Pour faire un CGColor pour cela, essayez ceci: Obtenez son 'patternImage' (et allez la route de conversion RGB s'il n'en a pas), créez une CGImage à partir du NSImage, créez un CGPattern qui dessine l'image CGImage, et créez un CGColor avec ce CGPattern. –

Questions connexes