2012-06-27 13 views
12

Ho un pulsante Popup che contiene un elenco di colori. Di fronte al titolo del colore, ho bisogno di visualizzare una piccola scatola dello stesso colore (_ magari un'immagine dello stesso colore _). Così, stavo pensando di approccio, che se riesco a creare un oggetto NSImage utilizzando oggetto NSColor (che sarà già presente), quindi posso usare

-(void) setImage:(NSImage *) menuImage

metodo NSMenuItem classe per visualizzare l'immagine in parte anteriore del titolo del colore nel pulsante popup.

Quindi, come posso realizzare la creazione di un oggetto NSImage usando NSColor?
Anche altri approcci per risolvere il problema sono ben accetti. :)Creazione di NSImage da NSColor

+0

Questo dovrebbe essere quello che stai cercando: [http://stackoverflow.com/questions/ 990.976/how-to-create-a-color-1x1-UIImage-on-the-iphone-dinamicamente] [1] [1]: http://stackoverflow.com/questions/990976/how -to-create-a-color-1x1-UIImage-on-the-iphone-dy namically –

risposta

15

Metodo categoria semplice farà questo

@interface NSImage (ImageAdditions) 

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size; 


@end 

@implementation NSImage (ImageAdditions) 

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size 
{ 
    NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease]; 
    [image lockFocus]; 
    [color drawSwatchInRect:NSMakeRect(0, 0, size.width, size.height)]; 
    [image unlockFocus]; 
    return image;  
} 

@end 

[EDIT] remove API deprecate

+0

Grazie mille @Warren. – rsharma

+0

'- setScalesWhenResized:' è ** deprecato **. * Questo metodo era correlato al comportamento di memorizzazione nella cache. In Mac OS X v10.6 e successive la memorizzazione delle immagini non è più necessaria e, di conseguenza, non è necessaria alcuna sostituzione. * –

+0

Non ce ne siamo accorti. Questo è taglia/incolla da un vecchio codice. Grazie –

5

e la variante di estensione rapida di cui sopra:

import Cocoa 

extension NSImage { 
    class func swatchWithColor(color: NSColor, size: NSSize) -> NSImage { 
    let image = NSImage(size: size) 
    image.lockFocus() 
    color.drawSwatchInRect(NSMakeRect(0, 0, size.width, size.height)) 
    image.unlockFocus() 
    return image 
    } 
} 
2

Ecco uno Swift 3 versione dell'inizializzatore di convenienza delle risposte precedenti:

extension NSImage { 
    convenience init(color: NSColor, size: NSSize) { 
     self.init(size: size) 
     lockFocus() 
     color.drawSwatch(in: NSRect(origin: .zero, size: size)) 
     unlockFocus() 
    } 
} 

Esempio di utilizzo:

let redSwatchImage = NSImage(color: .red, size: NSSize(width: 128, height: 128)) 

Sentitevi liberi di cambiare la semantica, se necessario :)