关注this问题及其他许多问题,我正在尝试将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
为什么不起作用?
答案 0 :(得分:3)
直接使用parseInt
结果,而不是255
减去值:
var r = parseInt(colors[0])
var g = parseInt(colors[1])
var b = parseInt(colors[2])
您当前通过将值互补输出到(而不是等效)输入值来生成完全相反的颜色。
答案 1 :(得分:2)
而不是255 - parseInt(colors[i])
,它应该是parseInt(colors[i])
。
在当前实现中 - 如果红色为0,255 - 0 = 255,则十六进制为FF。