Ho un'immagine in scala di grigi che desidero utilizzare per disegnare i controlli Cocoa. L'immagine ha vari livelli di grigio. Dove è più scuro, voglio che disegni un colore di tinta specificato più scuro. Voglio che sia trasparente dove l'immagine di origine è bianca.Tinting a scala di grigi NSImage (o CIImage)
Fondamentalmente, voglio riprodurre il comportamento di tintColor visto in UINavigationBar su iPhone.
Finora, ho esplorato diverse opzioni:
disegnare il colore della tinta sull'immagine scala di grigi usando composizione SourceOver -> Questo richiede un colore tinta non opachi -> Il risultato viene fuori molto più scuro di quanto desiderato
Utilizzare un CIMultiplyCompositing CIFilter per colorare l'immagine -> non posso [CIImage drawAtPoint: fromRect: operazione: frazione:] per disegnare solo una parte dell'immagine. Lo stesso funziona bene con NSImage -> Ottengo crash occasionali che non riesco a dare un senso a
Trasforma l'immagine in scala di grigi in una maschera. Cioè Il nero dovrebbe essere opaco. Il bianco dovrebbe essere trasparente Il grigio dovrebbe avere valori alfa intermedi. -> Questa sembra essere la soluzione migliore -> Prova come potrei, non posso ottenere questo.
Ho deciso di eseguire la colorazione e il ritaglio in due passaggi successivi. CIMultiplyCompositing funziona bene finché disegno l'intera immagine. Disegno su un NSImage, che a sua volta disegno parzialmente su un'immagine più piccola. –