Y at-il une méthode à Cocoa qui aide itérer à travers toutes les valeurs NSColor (R, G, B uniquement, alpha non touché)?

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

  •  05-10-2019
  •  | 
  •  

Question

Je besoin d'une fonction que pour un R donné, G, les valeurs B retourne la couleur suivante.

En disant la couleur suivante I signifie la couleur que l'un des composants changent par 1 (en supposant que R, G, B sont les valeurs de gamme de 0-255).

Il doit être construit de cette façon qu'à partir de la couleur blanche (ou noire alternative), vous pouvez itérer throught toutes les couleurs (ce qui compte est de 255 255 * 255 *). Ce serait bien, mais pas obligatoire qu'après itérer toutes les throught couleurs, elles sont répétées depuis le début.

Était-ce utile?

La solution

Vous pourriez baser la récupération de couleur sur listes de couleurs , soit en utilisant une coutume ou Apple comme un "Couleurs Safe Web":

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

Si vous avez besoin de plus et l'ordre n'a pas d'importance, vous pouvez utiliser par exemple +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];

Autres conseils

On ne sait pas ce que vous entendez par « la couleur suivante » mais vous pouvez facilement avoir un compteur dont les composants extraits:

uint32 color = 0;

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

// use color

++color;

sinon vous pouvez simplement générer des couleurs aléatoires et de garder la trace de ceux qui sont déjà utilisés avec un NSSet. Bien sûr, tu vas emballer 3 composants dans un seul objet, comme un int.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top