Javascript 如何从另一种颜色中减去一种颜色

Javascript 如何从另一种颜色中减去一种颜色,javascript,jquery,html,canvas,html5-canvas,Javascript,Jquery,Html,Canvas,Html5 Canvas,可以从另一种颜色中减去一种颜色吗 示例(如果我错了,请纠正我): 如果我从白色中减去红色和绿色,我希望 结果为蓝色 我只是假设你使用的是RGB,因为还有很多其他的混合颜色的方法。你必须把一种颜色分成3个不同的部分,R G和B // R G B var white = [ 1, 1, 1]; var red = [ 0, 0, 0 ]; var result = [ white[0] - red[0], white[1] - red[1], white[2] -

可以从另一种颜色中减去一种颜色吗

示例(如果我错了,请纠正我):

如果我从白色中减去红色绿色,我希望 结果为蓝色


我只是假设你使用的是RGB,因为还有很多其他的混合颜色的方法。你必须把一种颜色分成3个不同的部分,R G和B

//            R  G  B 
var white = [ 1, 1, 1]; 
var red =   [ 0, 0, 0 ];
var result = [ white[0] - red[0], white[1] - red[1], white[2] - red[2] ;
要减去颜色,您必须减去颜色的每个组成部分,稍后可能会将其转换回十六进制


*您可能希望稍后添加Alpha,您的
白-红
工作正常,只是JavaScript将值表示为以10为基数的值。您需要将它们转换回基数16(十六进制)。签出,将值转换回十六进制

var white = 0xFFFFFF, // Stored as 16777215
    red = 0xFF0000, // Stored as 16711680
    result = white - red; // 16777215 - 16711680 = 65535
console.log(result); // It's stored as base 10, so it prints 65535
var resultHex = result.toString(16); // 'ffff', converted back to hex

你是怎么减去它的?你用的是RGB还是CMYK,是混合颜色还是混合光线?直接减法不行。考虑<代码> 0xcc3366- 0xDD90011<代码> ->代码> 0xFFFFFFFFF 3355 < /代码>。另一方面,您的65535只是0xFFFF的十进制(以10为基数)表示形式-一个简单的基数转换将为显示目的提供FFFF,但在内部这两个数字是相同的
65535==0x00FFFF
is
true
,您的第一种方法是减去RGB颜色。@TJHeuvel,我同意你关于CMYK减色的看法,因为减色系统依次使用青色、品红和黄色染料光谱滤光片,因为青色、品红和黄色滤光片是“陷波”滤光片,它比窄带红色、绿色或蓝色“带通”滤光片允许更大的光能传输。因此,颜色减法比分段减法和地板减法更复杂。您对用于航空航天应用的CMYK减色系统有何看法?
0x001100-0x000011=0x0010ef
;从深绿色中减去深蓝色不应产生亮蓝色。分段减法和地板减法是唯一正确的减法颜色的方法。@Phrogz:啊,这很有道理。“我不知道会发生这种情况。@Phrogz,假设一个合成颜色值由一束相干的深绿色激光束叠加在一个深蓝色的非相干光背景上,我们还可以使用你优秀的分段减法公式从合成颜色值中滤除相干的深绿色激光束吗?”?谢谢。从带有激光点的非相干驾驶舱背景中减去相干激光点的颜色值是一个非线性图像减法问题吗?
//            R  G  B 
var white = [ 1, 1, 1]; 
var red =   [ 0, 0, 0 ];
var result = [ white[0] - red[0], white[1] - red[1], white[2] - red[2] ;
var white = 0xFFFFFF, // Stored as 16777215
    red = 0xFF0000, // Stored as 16711680
    result = white - red; // 16777215 - 16711680 = 65535
console.log(result); // It's stored as base 10, so it prints 65535
var resultHex = result.toString(16); // 'ffff', converted back to hex