我想在Javascript中使用所有RGB颜色。我制作了这个架构;
R G B
0 0 0
255 255 255
0 255 255
255 0 255
255 255 0
0 255 0
0 0 255
255 0 0
我用Javascript制作了这个: click
我现在拥有RGB颜色的所有可能组合吗?
答案 0 :(得分:5)
如果你想迭代所有的16,777,216种可能的24位RGB颜色,这可以通过一个循环很简单地实现:
for( i=0; i < 1<<24; i++) {
r = (i>>16) & 0xff;
g = (i>>8) & 0xff;
b = i & 0xff;
colour = "rgb("+r+","+g+","+b+")";
}
在您的代码中,间隔为100,这将需要将近20天才能完成一个周期。
如果您的颜色较少,请尝试以下操作:
for( i=0; i < 1<<12; i++) {
r = ((i>>8) & 0xf) * 0x11;
g = ((i>>4) & 0xf) * 0x11;
b = (i & 0xf) * 0x11;
colour = "rgb("+r+","+g+","+b+")";
}
这将基本上将您的颜色范围减少到每通道4位,为您提供#000000,#000011,#000022等。 100毫秒间隔的Rutime将是41秒,跨越4,096种颜色。
答案 1 :(得分:0)
不,您的代码仅显示1,786种颜色。总共有(256 ^ 3) == 16777216
种组合。
代码中的问题是值一起上升/下降,或者它们保持稳定在0或255.所以你永远不会看到,例如,R,G和B的三个值是不同的距离&#34;从0/255。
但是,视觉很酷!答案 2 :(得分:0)
我参加聚会有点晚了,但是... 有同样的问题。我的方法如下。所有人都需要显示255 ^ 3(16777215)颜色。正在构建对比度扫描仪以匹配前景色和背景色,并希望它是可视的。属性值存储在十六进制中(例如#C4E921)。使用setInterval并捕获其ID,以便在完成操作或超出对比基线时可以停止。本质上,获取当前的十六进制值并转换为十进制
const decClrVal = parseInt(hexClrVal, 16);
将一个添加到decClrVal并保存到新变量。将新值转换回24位十六进制
rangeElemTxt.value = ('000000' + newVal).slice(-6).toUpperCase();
)。可以使用setInterval函数的input [range]作为毫秒参数来控制速度。我还为显示的颜色使用了一个范围,这样我就可以从预定义的颜色开始,而不必总是从开头开始。
最后,可能不需要,但是它帮助我显示了RGB值...(此代码不是我的,是从Google搜索中获取的,但效果很好,按我的需要,我对此表示歉意。所有者也没有获得参考,但是我永远的感谢就足够了。:))
function hexToRgb(hex) {
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(shorthandRegex, function(m, r, g, b) {
return r + r + g + g + b + b;
});
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}
希望这会有所帮助。 祝好运! :)