我正在玩一些手动(步行像素)图像处理,我正在重新创建标准的“叠加”混合。我在这里看“Photoshop数学”宏:
http://www.nathanm.com/photoshop-blending-math/ (See also here用于更易读的Overlay版本)
两个源图像都是相当标准的RGBA(每个8位)格式,目的地也是如此。当两个图像完全不透明(alpha为1.0)时,结果会按预期正确混合:
但是如果我的“混合”图层(顶部图像)具有透明度,我对如何正确地将该alpha纳入混合等式感到有点困惑。我希望它的工作原理是混合层中的透明像素对结果没有影响,混合层中的不透明像素像往常一样进行叠加混合,而半透明混合层像素对结果有一些缩放效果。
有人可以向我解释混合方程式或背后的概念吗?
奖励积分如果你可以帮我这样做,结果图像有正确的预乘alpha(我认为只会对两层不透明的像素起作用)。 p>
谢谢!
// factor in blendLayerA, (1-blendLayerA) somehow?
resultR = ChannelBlend_Overlay(baseLayerR, blendLayerR);
resultG = ChannelBlend_Overlay(baseLayerG, blendLayerG);
resultB = ChannelBlend_Overlay(baseLayerB, blendLayerB);
resultA = 1.0; // also, what should this be??
答案 0 :(得分:3)
在混合基色和混合色之后,使用混合色的alpha混合原始基色和混合产生的颜色:
vec4 baseColor = ...;
vec4 blendColor = ...;
vec4 blendedColor = blend(baseColor, blendColor);
vec4 fragmentColor = (1.0 - blendColor.a) * baseColor + blendColor.a * blendedColor;
我用它来“叠加”混合不透明的基色和混合纹理,它有很多(半)透明像素。
答案 1 :(得分:1)
只是一个猜测,但我会尝试
resultA = 1 - (1-baseAlpha) * (1-blendAlpha)
答案 2 :(得分:0)
我正在仔细研究这个问题,直到我发现最好的方法是使基础和混合层都具有直线α,然后仅预测基本alpha的结果。