Esiste un metodo in Cocoa che l'iterazione aiuta attraverso tutti i valori NSColor (R, G, B solo, alfa non ha toccato)?

StackOverflow https://stackoverflow.com/questions/2940002

  •  05-10-2019
  •  | 
  •  

Domanda

Ho bisogno di una funzione che per un dato R, G, B valori restituisce il colore successivo.

Dicendo il colore successivo intendo il colore che uno dei componenti cambia da 1 (assumendo che R, G, B sono i valori di gamma 0-255).

Si deve essere costruita in questo modo che a partire dal colore bianco (o nero in alternativa) si può iterate ATTRAVERSO tutti i colori (che conta è 255 * 255 * 255). Sarebbe bello, ma non è necessario che, dopo l'iterazione throught tutti i colori, che vengono ripetuti dall'inizio.

È stato utile?

Soluzione

Si potrebbe basare il recupero colore su liste colore , sia utilizzando una consuetudine o Apple uno come "Colori web sicure":

NSColorList* cl = [NSColorList colorListNamed:@"Web Safe Colors"];
NSLog(@"%@", cl);
for (NSString *key in [cl allKeys]) { 
    NSLog(@" * %@ - %@", key, [cl colorWithKey:key]);
}

Se avete bisogno di più e l'ordine non importa, si potrebbe usare per esempio +colorWithColorSpace:components:count: :

uint32_t c = 0;
// increment c whenever a color is requested ...

CGFloat components[4] = { 
    ((c & 0xFF0000) >> 16) / 256.0, 
    ((c & 0x00FF00) >> 8 ) / 256.0,
    ((c & 0x0000FF) >> 0 ) / 256.0,
    0.0 
};
NSColor *color = [NSColor colorWithColorSpace:[NSColorSpace genericRGBColorSpace] 
                                   components:components 
                                        count:4];

Altri suggerimenti

Non è chiaro cosa si intende con "colore successivo", ma si può facilmente avere un contatore da cui si estraggono i componenti:

uint32 color = 0;

uint8 r = color%256;
uint8 g = (color/256) % 256;
uint8 b = (color/(256*256)) % 256;

// use color

++color;

altrimenti si può solo generare colori casuali e tenere traccia di quelli già utilizzati con una NSSet. Naturalmente si sta andando Pack 3 componenti in un unico oggetto, come un int.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top