最初,我认为使用一个带有预先计算步长的for循环可以很容易地实现它。
// blue = (240, 255, 255)
// red = (0, 255, 255)
const int step = (240 - 0) / (N - 1);
QColor color;
for (int i = 0; i < N; ++i)
{
color.setHsv(i * step, 255, 255);
}
但是随着N变大,结束颜色可能不是我所期望的,例如(N == 82),结束颜色是hsv(162,255,255)而不是hsv(240,255,255)。
我的意图是1)产生N种不同的颜色,2)光谱状,3)以红色开始,以蓝色结束。我的要求是否也要考虑S,V?
1条答案
按热度按时间2hh7jdfx1#
现在,您选择一个整数步长,并将其相加以从最小值到最大值。这样做的优点是使色调均匀分布。但正如您所观察到的,它的缺点是有时会导致范围错误(可能会严重错误)。
如果您愿意牺牲一点色调间距,使其完全均匀,以更接近于填充指定范围,则可以将步长计算为浮点数,执行浮点乘法,然后进行舍入(或截断)。
跳过其他颜色分量,只打印出这些值,我们得到:
如您所见,我们通常得到的间隔为3,但有几次(0至2、80至82和160至162)仅为2,因此我们可以填充整个范围。