将RGB颜色值转换为Decimal

saz*_*azr 8 javascript c++ binary colors

如何将RGB颜色值转换为纯十进制?

所以我有:RGB(255,255,255)是白色
它的十进制等效值是:16777215

我试过想它可能只是:

var dec = r*g*b; // but this doesn't work
Run Code Online (Sandbox Code Playgroud)

虽然这不起作用.

有人知道要从RGB(或rgba)转换为十进制的算法/等式吗?

Way*_*ett 15

RGB整数通常被视为三个不同的字节,其中最左侧(最高位)字节为红色,中间字节为绿色,最右侧(最低位)字节为蓝色.您可以像这样检索这些单独字节的值:

var c = 0xff03c0; // 16712640
var components = {
    r: (c & 0xff0000) >> 16, 
    g: (c & 0x00ff00) >> 8, 
    b: (c & 0x0000ff)
};
Run Code Online (Sandbox Code Playgroud)

您可以通过将字节移回来重新创建其组件的颜色:

c = (components.r << 16) + (components.g << 8) + (components.b);
Run Code Online (Sandbox Code Playgroud)

在您的情况下,只需components.r用您的实际变量替换(等).


小智 6

一个更好的答案(在清晰度方面)是这样的:

'Convert RGB to LONG:
 LONG = B * 65536 + G * 256 + R

'Convert LONG to RGB:
 B = LONG \ 65536
 G = (LONG - B * 65536) \ 256
 R = LONG - B * 65536 - G * 256
Run Code Online (Sandbox Code Playgroud)

LONG是您想要的长整数(十进制).好吧?当然,比特档

  • 我认为这种转变更为明显。 (3认同)