2010-11-25 6 views
5

Si je ne suis pas vraiment pointilleux sur le ton exact etc de l'image estompée, est-il un moyen rapide et sale pour dessiner un NSImage légèrement estompé, comme celui-ci ? J'ai cherché en ligne et je ne peux pas vraiment trouver ce que je cherche (mais je ne suis pas très bon quand il s'agit de comprendre les graphiques et les termes techniques corrects).manière la plus facile dessiner un NSImage grisés (comme une vue désactivée)

Non-dimmed Dimmed

Je suis en fait des icônes de gradation pour le même cas d'utilisation sous forme d'icônes de gradation Xcode comme ci-dessus (à savoir document comporte des modifications non enregistrées).

Répondre

16

Cela fonctionne bien pour moi:

NSImage *iconImage = [NSImage imageNamed:@"Icon"]; 
NSSize iconSize = [iconImage size]; 
NSRect iconRect = NSMakeRect(0.0, 0.0, iconSize.width, iconSize.height); 
[iconImage lockFocus]; 
[[NSColor colorWithCalibratedWhite:0.0 alpha:0.33] set]; 
NSRectFillUsingOperation(iconRect, NSCompositeSourceAtop); 
[iconImage unlockFocus]; 
[iconImage drawInRect:iconRect 
       fromRect:iconRect 
      operation:NSCompositeSourceOver 
       fraction:0.75]; 

Fondamentalement, je suis d'ajouter une couche noire avec une opacité de 33% au-dessus de l'icône réelle (masquage avec NSCompositeSourceAtop). Et puis je dessine l'icône grisée avec une opacité de 75%.

[Edit: se débarrassa de l'image temporaire noir à l'aide NSRectFillUsingOperation (...), comme conseillé par Nikolai Ruhe]

+0

Celui qui downvoted vous était un peu dur. Cela fonctionne. Est-ce que qui que ce soit qui est downvoted, s'il vous plaît, faites la chose décente et commentez pourquoi, s'il vous plaît? :) – d11wtq

+1

Utiliser 'NSRectFillUsingOperation' pour tirer au-dessus de' iconImage' vous pouvez vous débarrasser de la 'blackImage'. –

+0

Je pensais juste que moi-même. Il suffit de dessiner un rectangle sombre semi-opaque au-dessus du rectangle dans lequel l'image a été dessinée. En principe, faire la même chose. Sur le point de refactoriser – d11wtq

Questions connexes