我正在使用一些手册(步行像素)图像处理,并且正在重新创建标准的“覆盖”混合物。我在这里查看“ Photoshop Math”宏:

http://www.nathanm.com/photoshop-blending-math/ (另请参阅此处 对于更可读的版本的覆盖)

这两个源图像均以相当标准的RGBA(每个8位)格式,目的地也是如此。当两个图像完全不透明(alpha为1.0)时,结果按预期正确混合:

但是,如果我的“混合”层(顶部图像)具有透明度,那么我对 如何将alpha置于混合方程中 正确。我希望它能起作用,使得混合层中的透明像素对结果没有影响,混合层中的不透明像素是正常的覆盖层混合物,而半透明的混合层像素像素对结果具有一定的缩放效果。

有人可以向我解释混合方程或这样做的概念吗?

奖励积分 如果您可以帮助我这样做,以使所产生的图像正确地进行了alpha(我认为这仅适用于两层不透明的像素,我认为)。

谢谢!

// 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??
有帮助吗?

解决方案

只是一个猜测,但我会尝试

resultA = 1 - (1-baseAlpha) * (1-blendAlpha)

其他提示

混合基本颜色和混合颜色后,将原始的基本颜色和由混合颜色的α搅拌而产生的颜色:

vec4 baseColor = ...;
vec4 blendColor = ...;
vec4 blendedColor = blend(baseColor, blendColor);
vec4 fragmentColor = (1.0 - blendColor.a) * baseColor + blendColor.a * blendedColor;

我将其用于“叠加”,以混合不透明的基础颜色和混合纹理,该纹理具有许多(半)透明像素。

我正在准确地实验这个问题,直到我发现最好的是将底座和混合层都带有直α,然后只用碱给基础alpha的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top