gpt4 book ai didi

iphone - 如何画出好的RGB色图?

转载 作者:技术小花猫 更新时间:2023-10-29 10:36:46 24 4
gpt4 key购买 nike

我正在尝试绘制一个完整的 RGB 颜色图,最终将允许用户通过在任意点点击该可 View 来选择颜色。我当前的代码如下:

- (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。

Screenshot of the resulting color map

您有什么建议可以改进该图,使其代表 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));
}
}
}

这会产生以下输出,非常适合我的需要。

Result using HSB color space

感谢所有的输入!

最佳答案

好吧,您正试图将一个三维物体展平到一个平面上。 RGB 颜色基本上表示立方体内部的一个点。将 RGB 实体映射到表面上在数学上可能是可行的,但对于这种颜色选择目的可能不是特别直观。

使用 HSB 可能会有更好的运气,它更像是一个以色调为圆周角度的圆柱体。您可以“展开”圆柱体,将色调映射到 y 坐标,然后沿 x 轴改变亮度或饱和度——您可以做一些简单的测试来决定哪个组件对您的应用程序更重要。如果您觉得有必要包含第三个组件,则可以用双指轻扫。

X 轴饱和度的 HSB:
HSB map; S on X axis

X轴为亮度:
HSB map; B on X axis

饱和度和亮度都在 X 轴上:
HSB map; S=B on X axis

如果您需要白色(当 S = 0%、B = 100% 时出现),您可以沿一侧粘贴 strip ,或尝试 S = 1/B。

关于iphone - 如何画出好的RGB色图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6283941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com