十进制值到 rgb 并返回到十进制

decimal value to rgb and back to decimal

我有一个十进制形式的颜色,需要将它转换成 rgb 再转换回 de,所以我用这个来做到这一点:

var currentcolor = 0xffd100;

const rgb_format = (c) => {
  var newrgb = {r: (c & 0xff0000) >> 16,
                g: (c & 0x00ff00) >> 8,
                b: (c & 0x0000ff)}

  return newrgb;
};

var rgb = rgb_format(currentcolor);

const decimal_format = (newrgb) => {
  let decimal = (newrgb.r << 16) + (newrgb.g << 8) + (newrgb.b);

  console.log(decimal);

  return decimal;
};

color.color = decimal_format(rgb);

事实是,我有一个 rgb 编辑器,每个值 (r、g、b) 都有滑块。它们按应有的方式工作,但是当 r 中的值为 16 或更小时,其他滑块(g,b)停止更改我正在编辑颜色的组件的颜色。

rb 为 0 并且 g 大于 16 时也会发生同样的情况。在这种情况下,当 g 小于 16 时,g 将颜色更改为红色,并且当它大于 16 时它不显示颜色。 这是显示我的问题的 gif: color-editing-problem-gif 或者 alternate

...I am also displaying the color like this: style="background: #{currentcolor.toString(16)};

这将无法正常工作。考虑颜色 1092 十进制 (0x000444)。如果 currentcolor 具有该值,则 currentcolor.toString(16) 会导致 444#444与CSS中的#000444相同,#444是颜色#444444。同样,颜色 65535 (0x00FFFF) 将导致 #ffff,这是无效的 CSS 颜色(它们必须是三位或六位,而不是四位)。

要正确输出颜色,您需要填充字符串的开头:

style="background: #{currentcolor.toString(16).padStart(6, "0")}