在Python中将float转换为两位十六进制数

时间:2016-02-15 00:08:19

标签: python hex

与此处所有类似措辞的问题不同,我并没有试图获得浮动的实际十六进制值。基本上我试图制作渐变色,我需要一个看起来像这样的函数:

def float_to_color(weight):
    color = '#0000'
    hex = ????? #do something with weight here
    color += hex
    return color

我能想到的唯一方法是将weight浮点数除以256然后有一个不同的情况,为每个256"槽口返回一个不同的字符串。"这将是一个更简单的方法!

这是我需要做的事情,但不是10个不同的情况,我希望每个可能的值00到FF与256个权重值成比例。我不能使用RGB元组类型的颜色,因为我需要它的特定模块不能识别它。权重是从测量中获得的任意0.0-1.0浮点值。颜色应该代表它。

def weight_to_color(weight):
    color_base = '#0000'
    if weight > 0.9: return str(color_base+'FF')
    elif weight > 0.8: return str(color_base+'DD')
    elif weight > 0.7: return str(color_base+'EE')
    elif weight > 0.6: return str(color_base+'BB')
    elif weight > 0.5: return str(color_base+'99')
    elif weight > 0.4: return str(color_base+'77')
    elif weight > 0.3: return str(color_base+'55')
    elif weight > 0.2: return str(color_base+'33')
    elif weight > 0.1: return str(color_base+'11')
    else: return str(color_base+'00')

2 个答案:

答案 0 :(得分:2)

你可以使用这样的东西

def int2hex(x):
    val = hex(x)[2:] # returns something like '0x15', so we remove the '0x'
    val = "0"+val if len(val)<2 else val # make sure 2 digits
    return val

然后在你的函数中,你可以获得像

这样的十六进制值
return color_base+int2hex(int(255*weight))

其中color_base ="#0000"

查看 int2hex 函数,我们看到

int2hex(int(255*0)) == "00"
int2hex(int(255*0.5)) == "7F"
int2hex(int(255*1.0)) == "FF"

这假设您的体重从0到1.如果它在不同范围内运行,您可以使用int2hex(int(255*weight/max_weight)),其中max_weight是允许的最大值。

此外,您不应将变量命名为十六进制,因为它会影响内置函数十六进制。如果你绝对不需要与变量在同一范围内的函数(在你的情况下,你没有),这可能没问题,但是这是一个很难习惯的习惯。

答案 1 :(得分:1)

通常,当颜色由浮点值表示时,它在0.0到1.0的范围内。权重1.0对应于0xff的十六进制表示。这意味着您可以 浮点颜色值0xff或其十进制等值 255 。您还必须确保将结果截断为int。

相关问题