2014-10-31 5 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 

Я использую формулу Пегтопа, указанную здесь; http://en.wikipedia.org/wiki/Blend_modes. Я не уверен в правильности его реализации. Есть идеи?

ответ

1

Применить формулу к каждому значению RGB вместо использования Hex. Если вам нужно использовать Hex в качестве входа, вам, вероятно, понадобится конвертировать.

Вам необходимо нормализовать каждое значение (так 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

+1

Добавлен код примера, чтобы лучше понять, что я пытался объяснить. – EvilZebra

Смежные вопросы