Javascript 自动十六进制rgb颜色生成

Javascript 自动十六进制rgb颜色生成,javascript,hex,rgba,Javascript,Hex,Rgba,我在JavaScript中根据从冷到热的值生成热图样式的颜色。但出于某种原因,我得到了一些粉红色和紫色 关于stackoverflow有很多答案,但它们大多与使用HSL生成有关,不幸的是,对于Google Earth,我需要RGBA格式(向后为ABGR) 1=红色=热 0.5=绿色=中间色 0=蓝色=冷 function generateColor(value) { var r = Math.round(value * 255), g = Math

我在JavaScript中根据从冷到热的值生成热图样式的颜色。但出于某种原因,我得到了一些粉红色和紫色

关于stackoverflow有很多答案,但它们大多与使用HSL生成有关,不幸的是,对于Google Earth,我需要RGBA格式(向后为ABGR)

1=红色=热

0.5=绿色=中间色

0=蓝色=冷

    function generateColor(value) {
        var r = Math.round(value * 255),
            g = Math.round((1 - Math.abs(0.5 - value)) * 255),
            b = Math.round((1 - value) * 255);
        r = r.toString(16);
        g = g.toString(16);
        b = b.toString(16);
        if (r.length < 2) {
            r += r;
        }
        if (g.length < 2) {
            g += g;
        }
        if (b.length < 2) {
            b += b;
        }
        return 'ff' + b + g + r;
    }
函数生成颜色(值){
var r=数学四舍五入(值*255),
g=数学四舍五入((1-数学绝对值(0.5-值))*255),
b=数学四舍五入((1-值)*255);
r=r.toString(16);
g=g.toString(16);
b=b.toString(16);
如果(r.长度<2){
r+=r;
}
如果(g.长度<2){
g+=g;
}
如果(b.长度<2){
b+=b;
}
返回“ff”+b+g+r;
}
这里某个地方有只虫子!!这是我用来解决这个问题的小提琴:


我认为你的问题在于:

if (r.length < 2) {
    r += r;
}
仅在一行中:

r = ("0" + r.toString(16)).slice(-2);
但您也可以将大部分函数放在一行中:

function generateColor(value) {
    var r = Math.round(value * 255),
        g = Math.round((1 - Math.abs(0.5 - value)) * 255),
        b = Math.round((1 - value) * 255);
    return (0xff000000 + 0x10000 * b + 256 * g + r).toString(16);
}

你确定它是ABGR而不是ARGB吗?对于Google Earth,它是aabbggrr:(很好,这个效果更好!不过颜色有点不合适:@KimT我明白了…我想可能是因为你选择了绿色作为中间颜色,而黄色可能是更好的选择。但是要做到这一点,你必须修改你计算
r
g
b
的方式,这会让你怀疑HSL是否更好。)r、 你仍然可以将值转换为RGB,你知道。是的,也许我可以这样做,HSL到RGB的函数有点大@KimT Cool,我几个月前发布了一个版本,如果你想试试的话。
function generateColor(value) {
    var r = Math.round(value * 255),
        g = Math.round((1 - Math.abs(0.5 - value)) * 255),
        b = Math.round((1 - value) * 255);
    return (0xff000000 + 0x10000 * b + 256 * g + r).toString(16);
}