我正在尝试绘制一个完整的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。
![结果颜色映射的屏幕截图](https://istack.dev59.com/LEZ2f.webp)
感谢您提供的所有输入!
更新:
根据Josh Caswell的建议,我使用了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));
}
}
}
这导致了以下输出,非常适合我的需要。
感谢所有的输入!