之前在做某些项目的时候实现过实色混合的算法,后面实际操作中发现了点问题,查了一些人写的资料基本意思都一样,我感觉原理都错了。所以重新分析得到以下结果。
以下描述将使用:imgDst表示结果图层,imgSrc1表示使用叠加模式的图层,imgSrc2表示底下的图层。
流传的算法的公式很简单:
if (imgSrc1 + imgSrc2 – 255 < 0)
imgDst = 0;
else
imgDst = 255;
实验开始。
首先,如何判断是不是判断条件错误的原因,我使用ps生成两个图层,imgSrc1全白,imgSrc2全黑,全白叠加模式选择实色混合;测试结果是显示全黑,似乎判断小于等于0才对;调换两层图层顺序,全黑叠加模式选择实色混合,结果是全白,按计算公式来说,应该依旧全黑才对。
此时我认为应该跟图层顺序是有关系的,算法大基调应该是正确的。也就是imgSrc1+imgSrc2小于255,结果为0,大于255,结果为255;等于0时,为 特殊情况。
在ps中模拟,将imgSrc1所有值设置为128,imgSrc2设置为127,相加为255,此时结果图为全黑0,调换顺序,结果图为全白255。
综合以上的测试,推测原理代码如下:
if (imgSrc1 + imgSrc2 > 255)
{imgDst = 255}
else if (imgSrc1 + imgSrc2 < 255)
{imgDst = 0}
else {
if (imgSrc1 > imgSrc2)
{imgDst = 0}
else
{imgDst = 255}
}