Estoy tratando de pintar un mapa de color RGB completo que eventualmente permitirá a un usuario seleccionar un color tocando ese mapa visual en cualquier punto. Mi código actual es el siguiente:¿Cómo pintar un buen mapa de colores RGB?
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
for (float x=0; x<320; x++) {
for (float y=0; y<416; y++) {
float r = x/320;
float g = y/416;
float b = (y < 208) ? y/208 : (416 - y)/208;
CGContextSetRGBFillColor(c, r, g, b, 1.0);
CGContextFillRect(c, CGRectMake(x, y, 1, 1));
}
}
}
El resultado no es tan malo, pero no estoy satisfecho todavía. El espectro pierde colores brillantes, incluido el blanco. La razón es clara: rojo, verde y azul nunca llegarán a 1.0 al mismo tiempo.
¿Tiene alguna aconsejan cómo mejorar ese mapa lo que representa el espectro completo del espacio de color RGB?
Gracias por su contribución!
ACTUALIZACIÓN:
Como sugiere Josh Caswell He utilizado el espacio de color HSB y el siguiente código:
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
int size = 20;
for (float x=0; x<320; x+=size) {
float s = x < 160 ? 1 : (320 - x)/160;
float b = x < 160 ? x/160 : 1;
for (float y=0; y<416; y+=size) {
float h = y/416;
[[UIColor colorWithHue:h saturation:s brightness:b alpha:1.0] setFill];
CGContextFillRect(c, CGRectMake(x, y, size, size));
}
}
}
Esto se traduce en la siguiente salida, que es perfecto para mi necesariamente.
Gracias por toda la entrada!
Gracias por compartir el código; ¡que salió muy bien! –
El resultado final es realmente hermoso. Espero que nadie requiera un gris; es posible que desee hacer una serie de grises en el lado derecho. –
Eso es una buena adición. Gracias. –