iphone – 如何画一个好的RGB彩色地图?

我试图绘制一个完整的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色彩空间的全部范围?

感谢您的所有投入!

更新:

根据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));
        }
    }
}

这导致以下输出对于我的需要是完美的.

感谢所有输入!

那么你试图将一个三维物体压平在飞机上. RGB颜色基本上表示立方体内的点.将RGB固体映射到表面上可能在数学上是可能的,但是对于该颜色选择目的可能不是特别直观的.

你可能会喜欢使用HSB,这更像是圆柱体,色调是圆周的角度.您可以“展开”圆柱,将色调映射到y坐标,然后沿x轴改变亮度或饱和度 – 您可以进行一些简单的测试来确定哪个组件对您的应用程序更重要.如果您觉得有必要包括它,则可以使用双指滑动作为第三个组件.

HSB在X轴上饱和:

具有X轴上的亮度:

饱和度和亮度相等,两者均在X轴上:

如果您需要白色,当S = 0%,B = 100%时发生,您可以沿着一边粘附条带,或尝试S = 1 / B.

翻译自:https://stackoverflow.com/questions/6283941/how-to-paint-a-good-rgb-color-map

转载注明原文:iphone – 如何画一个好的RGB彩色地图?