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

16 진수를 사용하는 대신 각 RGB 값에 공식을 적용하십시오. 16 진수를 입력으로 사용해야하는 경우 아마 변환해야합니다.

각 값 (따라서 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