2015-01-02 8 views
5

Il mio designer ha specificato un colore da disegnare. Quando provo a disegnare quel colore in un'app Cocoa, ottengo un colore risultante visibilmente diverso dall'immagine di riferimento visualizzata da Sketch.app.Come faccio a ottenere la mia app Cocoa per disegnare esattamente il colore specificato dal mio designer in Sketch?

Ho creato una piccola app Cocoa che disegna una vista personalizzata. Ecco la parte interessante del codice. Si noti che sto inizializzando il colore nello spazio SRGB.

class View: NSView { 
    override func drawRect(dirtyRect: NSRect) { 
     let components : [CGFloat] = [156.0/255.0, 0, 254.0/255.0, 1] 
     let color = NSColor.init(SRGBRed: components[0], green: components[1], blue: components[2], alpha: components[3]) 
     color.setFill() 
     NSRectFill(self.bounds) 
    }  
} 

Ecco cosa disegna. (. Nevermind la parte che riguarda il cursore e ho tolto l'ombra finestra in modo sarebbe più facile a recensire il fianco a fianco con altre finestre.)

enter image description here

Ed ecco la parte del file Sketch:

enter image description here

Mettendo tutto insieme, ecco un lato accanto al file di Sketch e la vista personalizzata, così come la lente Xscope che visualizza il valore del colore sotto il cursore del mouse.

Quando si libra sopra il file Schizzo, vedo questo:

enter image description here

Quando si libra sopra la mia visualizzazione personalizzata, vedo questo:

enter image description here

Si può vedere che il valore del colore del pixel sotto il cursore del mouse nero come letto da Xscope è significativamente diverso. I colori hanno anche un aspetto significativamente diverso sul mio display Retina Macbook Pro, anche se interessante, non così diverso nello screenshot catturato PNG.

TUTTAVIA: fino ad ora, questo era tutto fatto con le impostazioni di visualizzazione di default e profilo colore "LCD a colori" (l'hardware è Retina Macbook Pro con il suo display integrato). Quando cambio manualmente il profilo di visualizzazione a “sRGB IEC61966-2.1” in Impostazioni OSX App, quindi esemplare ancora i colori con xScope, è possibile vedere questi valori campionati:

enter image description here

E quando il campionamento la visualizzazione personalizzata :

enter image description here

più interessante, si può vedere che i valori campionati dal xScope sul mio visualizzazione personalizzata corrispondono esattamente i valori specificati, e il colore è anche visivamente corretta. Ma ovviamente, non posso permettere ai miei utenti di cambiare il loro profilo di visualizzazione.

La mia domanda: come faccio a fare in modo che il colore della vista personalizzata corrisponda esattamente al colore in Sketch (sia per l'ispezione visiva che quando campionato con la lente Xscope) con il profilo del display LCD a colori predefinito?

+0

Non presupporrei necessariamente che Sketch.app sia ottimo per preservare il profilo colore di un file immagine importato. Presumo che il file immagine abbia un profilo colore incorporato. Preview.app è probabilmente più affidabile. A seconda di come il designer ha creato il file, il campione di colore potrebbe trovarsi nel profilo di colore del display, che non necessariamente si riprodurrebbe fedelmente su un altro display. Se hanno specificato che i valori RGB che hanno elencato si trovano nello spazio colori sRGB, basta usarli. Per quello che vale, # 9c00fe codifica quei valori RGB nella notazione dei colori Web, che è esplicitamente sRGB. –

+0

Il designer ha appena disegnato una casella in Sketch e immesso il colore come valore di riempimento. Il mio compito è quello di far combaciare i due sul mio schermo (quindi il colore apparirà corretto al progettista e ai nostri utenti sui loro schermi). – Jaanus

+1

Come ha scelto il designer il colore? Hanno usato la finestra di selezione colori standard? In quella finestra, nella scheda che consente di inserire/visualizzare i valori RGB, c'è un piccolo controllo per selezionare lo spazio colore. Se non sono stati attenti a scegliere uno spazio cromatico specifico e te lo hanno comunicato, allora la loro scelta è quasi inutile, temo. Lo stesso con i valori RGB elencati. Se riesci a farli riprodurre il processo mentre osservi, puoi forse capire da quale spazio cromatico provengono quei valori RGB. O li hanno convertiti in uno spazio cromatico desiderato. –

risposta

0

Ho appena risolto questo problema. Ecco il mio processo. Appena testato su un Retina Macbook Pro.

  1. Apri schizzo.
  2. Aprire Meter digitale a colori (installato su OSX)
  3. Passa alla 'Visualizzazione in Generic RGB'
  4. Nel menù, in modo che 'Visualizza -> Valori visualizzati -> Come Decimal`
  5. mouse sul colore della l'opera in schizzo e annotare i valori (ad esempio 0, 150, 200)

utilizzare tale valore a Cocoa:

-(void)drawRect:(NSRect)dirtyRect { 
    [[NSColor colorWithCalibratedRed:0/255.0 green:150/255.0 blue:200/255.0 alpha:1] set]; 
    NSRectFill(self.bounds); 
} 

Questo dovrebbe funzionare, come 'G eneric RGB 'è uno spazio indipendente dal dispositivo equivalente allo spazio colore' calibrato 'in Cocoa.

+0

Funziona solo se hai aperto il documento sullo stesso sistema utilizzato dal progettista per progettarlo. In caso contrario, il tuo Mac non mostrerà lo stesso colore del designer quando lo hanno progettato e la situazione è senza speranza. Il designer ** deve ** utilizzare un flusso di lavoro che utilizza e conserva il profilo del colore, che Sketch non utilizza (l'ultima volta che ho controllato). E devi usare un programma che rispetti il ​​profilo colore allegato quando mostri le immagini, se vuoi campionarle. –

+0

@KenThomases sì, questo è assolutamente vero e un buon punto. Il mio flusso di lavoro garantisce solo una traduzione perfetta da ciò che lo sviluppatore vede in Sketch a ciò che lo sviluppatore vuole vedere in Cocoa. –

Problemi correlati