2014-10-31 99 views
0

我正在尝试编写一个函数来计算给定前景色和背景色的柔和光线。 功能如下;柔光混合模式

var background = '0xFFFFFF'; 
var foreground = '0x47768C'; 

var calculateSoftlight = function (background, foreground) { 
    var intBackground = parseInt(background, 16); 
    var intForeground = parseInt(foreground, 16); 

    var softlight = (1 - (2 * intForeground)) * (intBackground*intBackground) + (2 * intForeground * intBackground); 
    return softlight.toString(16); 
} 

calculateSoftlight(background, foreground); //-8eed155338bb200000 

我正在使用此处列出的Pegtop公式; http://en.wikipedia.org/wiki/Blend_modes。我不确定这是否正确执行。有任何想法吗?

回答

1

将公式应用于每个RGB值而不是使用十六进制。如果你需要使用十六进制作为输入,你可能需要转换。

您需要对每个值进行标准化(所以value/255)并在公式中使用。然后将结果乘以255(并四舍五入)以转换回8位值。

这样的事情应该是密切的,我没有专门使用该公式,虽然这是未经测试。

var top = top/255, 
    bot = bot/255; 

top = ((1 - 2*bot)*Math.pow(top, 2)) + 2*bot*top, 
top = Math.round(top * 255); 
+0

我明白了。谢谢!! – Siva 2014-10-31 23:50:42

+1

添加了一些示例代码,以帮助更好地了解我尝试解释的内容。 – EvilZebra 2014-10-31 23:55:05