我将尝试将十进制值转换回RGB值。
假设这是编译十进制值的公式。
(例如 rgb(16,120,78) 加起来为 1071078)
如何在没有“溢出”的情况下解决 r、g 和 b 呢?
先行感谢!
假设这是编译十进制值的公式。
c = r*(255*255)+g*255+b
(例如 rgb(16,120,78) 加起来为 1071078)
如何在没有“溢出”的情况下解决 r、g 和 b 呢?
先行感谢!
c = r*(255*255)+g*255+b
使用除法、取模运算符 (%
) 和向下取整函数。
var r = Math.floor(c / (256*256));
var g = Math.floor(c / 256) % 256;
var b = c % 256;
halex注意到了代码中255和256的差异。正如Millie Smith所指出的那样,当您将这些组件放在一起时,应该使用256而不是255:
var c = r * (256*256) + g * 256 + b;
颜色组件的值可以从0到255,因此您需要乘以256来防止下一个组件与上一个组件重叠。
这个Github链接对我很有帮助,但是我使用以下代码编辑了它以解决我的一个问题:
// convert three r,g,b integers (each 0-255) to a single decimal integer (something
between 0 and ~16m)
function colourToNumber(r, g, b) {
return (r << 16) + (g << 8) + (b);
}
// convert it back again (to a string)
function numberToColour(number) {
const r = (number & 0xff0000) >> 16;
const g = (number & 0x00ff00) >> 8;
const b = (number & 0x0000ff);
//return [b, g, r];
return `rgb(${b},${g},${r})`;
}
我的编辑代码使RGB正确返回,就像我设置的颜色一样
我的例子:
十进制颜色是:11665407 这是黄色
十进制颜色是:11665329 这是绿色
请使用此示例测试两个代码: stackblitz示例
c = r * 16^4 + g * 16^2 + b
假设我们有一个RGB颜色代码的十进制表示 c ,我们解出r,g,b:
b = c % 256
g_0 = (c % 65536 - b)
r_0 = c - g_0 - b
g = g_0 / 256
r = r_0 / 65536
这些都是整数操作,所以它们应该很快,但我不能保证解释器会以这种方式处理它们。作为一个函数:
function c_to_rgb(c) {
var b = c % 256,
g_0 = (c % 65536 - b),
r_0 = c - g_0 - b,
g = g_0 / 256,
r = r_0 / 65536;
return [r, g, b];
}
I managed to solve it that way
getRGBFromDecimal(number) {
var b = Math.floor(number / (256*256));
var g = Math.floor(number / 256) % 256;
var r = number % 256;
return `RGB(${r},${g},${b})`;
}