2

这个问题和许多其他问题之后,我正在尝试将 rgb 值转换为十六进制值。

复制/粘贴最常用和接受的答案,我制作了这个脚本

function componentToHex(c) {
            var hex = c.toString(16);
            return hex.length == 1 ? "0" + hex : hex;
        }

function rgbToHex(rgb) {

            var colors = rgb.split("(")
            colors = colors[1].split(")")
            colors = colors[0].split(",")

            var r = 255 - parseInt(colors[0])
            var g = 255 - parseInt(colors[1])
            var b = 255 - parseInt(colors[2])

            return componentToHex(r) + componentToHex(g) + componentToHex(b);
        }

alert(rgbToHex("rgb(0, 51, 255)"))

结果:

ffcc00

预期结果:

0033ff

为什么它不起作用?

4

2 回答 2

3

直接使用parseInt结果,而不是255减去值:

var r = parseInt(colors[0])
var g = parseInt(colors[1])
var b = parseInt(colors[2])

您当前通过输出与输入值互补(而不是等效)的值来产生完全相反的颜色。

于 2013-04-11T14:33:26.617 回答
2

而不是255 - parseInt(colors[i]),它应该是parseInt(colors[i])

在您当前的实现中 - 如果红色为 0,则 255 - 0 = 255,十六进制为 FF。

于 2013-04-11T14:42:43.857 回答