Я пытаюсь нарисовать полную цветовую карту 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));
}
}
}
Результат не так уж и плох, но я еще не удовлетворен. Спектр пропускает яркие цвета, включая белый. Причина понятна: красный, зеленый и синий никогда не достигнут 1,0 одновременно.
Есть ли у вас какие-либо советы, как улучшить эту карту, чтобы она представляла полный спектр цветового пространства RGB?
Спасибо за ваш вклад!
UPDATE:
Как подсказал Джош Касвелл Я использовал цветовое пространство HSB и следующий код:
- (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));
}
}
}
Это приводит к следующему выводу, который идеально подходит для моих нужд.
Спасибо за все комментарии!