从this answer开始,我在Python中生成一些均匀间隔的颜色,如下所示:
>>> import colorsys
>>> num_colors = 22
>>> hsv_tuples = [(x*1.0/num_colors, 0.5, 0.5) for x in range(num_colors)]
>>> rgb_tuples = map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples)
>>> rgb_tuples
[(0.5, 0.25, 0.25), (0.5, 0.3181818181818182, 0.25), (0.5, 0.38636363636363635, 0.25), (0.5, 0.45454545454545453, 0.25), (0.4772727272727273, 0.5, 0.25), (0.4090909090909091, 0.5, 0.25), (0.34090909090909094, 0.5, 0.25), (0.2727272727272727, 0.5, 0.25), (0.25, 0.5, 0.2954545454545454), (0.25, 0.5, 0.36363636363636365), (0.25, 0.5, 0.43181818181818177), (0.25, 0.5, 0.5), (0.25, 0.4318181818181819, 0.5), (0.25, 0.36363636363636354, 0.5), (0.25, 0.2954545454545454, 0.5), (0.2727272727272727, 0.25, 0.5), (0.34090909090909083, 0.25, 0.5), (0.40909090909090917, 0.25, 0.5), (0.4772727272727273, 0.25, 0.5), (0.5, 0.25, 0.4545454545454546), (0.5, 0.25, 0.38636363636363646), (0.5, 0.25, 0.3181818181818181)]
Hows是否会将这些(“坐标?”)RGB元组转换回RGB十六进制字符串,例如#FF00AA
?可能是一个简单的问题,但不是我能找到答案的问题。
答案 0 :(得分:3)
1)将浮点数乘以256并转换为整数。如果它等于256,则减1。
编辑:由于我收到了很多混淆的注释,你必须乘以256(如果它最终为256,则减去1)的原因是你获得与每个整数对应的完全相同的浮点数输出'x'十六进制格式。输出基数为16的数字,使用小写字母表示高于9的数字。
使用它,把它做成大写并在它之前插入#。
答案 1 :(得分:3)
对于每种颜色,地板(颜色* 256),以十六进制打印(填充到2处)。 e.g:
In [1]: rgb_tuples = [(0.5, 0.25, 0.25), (0.5, 0.3181818181818182, 0.25), (0.5, 0.38636363636363635, 0.25), (0.5, 0.45454545454545453, 0.25), (0.4772727272727273, 0.5, 0.25), (0.4090909090909091, 0.5, 0.25), (0.34090909090909094, 0.5, 0.25), (0.2727272727272727, 0.5, 0.25), (0.25, 0.5, 0.2954545454545454), (0.25, 0.5, 0.36363636363636365), (0.25, 0.5, 0.43181818181818177), (0.25, 0.5, 0.5), (0.25, 0.4318181818181819, 0.5), (0.25, 0.36363636363636354, 0.5), (0.25, 0.2954545454545454, 0.5), (0.2727272727272727, 0.25, 0.5), (0.34090909090909083, 0.25, 0.5), (0.40909090909090917, 0.25, 0.5), (0.4772727272727273, 0.25, 0.5), (0.5, 0.25, 0.4545454545454546), (0.5, 0.25, 0.38636363636363646), (0.5, 0.25, 0.3181818181818181)]
In [2]: for (r,g,b) in rgb_tuples:
...: print '%02x%02x%02x' % (int(r*255), int(g*255), int(b*255))
...:
804040
805140
806240
807440
答案 2 :(得分:0)
最有效的方法是将基数为 1 的十进制 RGB 转换为基数为 16 的十进制数或 HEX。
r = int(input('R: '))
g = int(input('G: '))
b = int(input('B: '))
def rgbToHex(r,g,b):
rgb = [r,g,b]
x = ''
for i in rgb:
x += format(i,'02x').upper()
if x[0] == x[1] and x[2] == x[3] and x[4] == x[5]:
x = x[0] + x[2] + x[4]
return '#'+x
print(rgbToHex(r,g,b))