¿Hay algún método en el cacao que ayuda iteración a través de todos los valores NSColor (R, G, B solamente, alfa no se toca)?

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

  •  05-10-2019
  •  | 
  •  

Pregunta

I necesita una función que para un determinado R, G, los valores B devuelve el siguiente color.

Al decir el siguiente color I significa el color que uno de los componentes cambia por 1 (suponiendo que R, G, B son los valores del rango 0-255).

Tiene que ser construido de esa manera que a partir de color blanco (o negro alternativamente) se puede iterar entre TODAS las de los colores (que cuenta es 255 * 255 * 255). Sería bueno, pero no es necesario que después de la iteración entre TODAS las de los colores, que se repiten desde el principio.

¿Fue útil?

Solución

Se podría basar la recuperación color en listas de colores , ya sea usando una costumbre o Apple uno como "colores para la web"

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

Si necesita más y el orden no importa, se puede utilizar, por ejemplo, +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];

Otros consejos

No está claro a qué se refiere con "siguiente color" pero se puede fácilmente tener un contador de la que extraer los componentes:

uint32 color = 0;

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

// use color

++color;

lo contrario sólo puede generar colores al azar y realizar un seguimiento de los ya utilizados con un NSSet. Por supuesto que sí va a empacar 3 componentes en un solo objeto, como un int.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top