计算 2 种颜色之间的点



我希望创建一个可以输出渐变颜色的函数。让我解释更多...

iterations = 5
startcolor = 0xa480ff
endcolor = 0x80bdff
colors = []
for x in range(1, iterations):
colors[x-1] = color

colors[x-1] = color行中,我想计算渐变上x百分比的颜色。例如,如果x3iterations5,那么color将介于startcolorendcolor的梯度之间。1startcolor5endcolor

如果您认为简单的线性插值就足够了,正如您在评论中所述,您可以尝试一下:

iterations = 5
startcolor = 0xa480ff
endcolor = 0x80bdff
colors = []
start_r, start_g, start_b = startcolor >> 16, startcolor >> 8 & 0xff, startcolor & 0xff
end_r, end_g, end_b = endcolor >> 16, endcolor >> 8 & 0xff, endcolor & 0xff
delta_r, delta_g, delta_b = (end_r - start_r) / iterations, (end_g - start_g) / iterations, (
end_b - start_b) / iterations
for x in range(iterations + 1):
r = int(start_r + delta_r * x)
g = int(start_g + delta_g * x)
b = int(start_b + delta_b * x)
colors.append(int(r << 16 | g << 8 | b))
print(*(f"{c:x}" for c in colors))

这应该打印:

a480ff 9c8cff 9598ff 8ea4ff 87b0ff 80bdff

这是我尝试做类似事情的一些代码。最好注意,在我的情况下,我想要一个字符串。

如您所见,我正在每个颜色值 rgb(不是 a) 之间切换并将它们重新添加在一起

我很快就完成了这个,除了这两个功能之外,没有测试任何东西。

def lerp(a, b, p):
return a + ((b - a) * p)
def lerpH(c1, c1, p):
r = lerp(int(c1[:2], 16), int(c2[:2], 16), p)
g = lerp(int(c1[2:4], 16), int(c2[2:4], 16), p)
b = lerp(int(c1[4:6], 16), int(c2[4:6] ,16), p)
t = lambda _x: str(hex(int(_x)))[2:]
return f'{t(r)}{t(g)}{t(b)}'
iterations = 5
startcolor = "a480ff" 
# startcolor = str(hex(0xa480ff))[2:]  # for hex()
endcolor = "80bdff"
# endcolor = str(hex(0x80bdff))[2:]  # for hex()
colors = []
for x in range(0, iterations):
colors[x] = lerpH(startcolor, endcolor, float(x)/iterations)
#colors[x] = int(colors[x], 16)  # this is to convert back to hex

最新更新