Ben*_*tto 5 graphics blend image-processing rgba premultiplied-alpha
我正在玩一些手动(按像素移动)图像处理,我正在重新创建标准的“叠加”混合。我在这里查看“Photoshop 数学”宏:
http://www.nathanm.com/photoshop-blending-math/ (另请参阅此处了解更易读的 Overlay 版本)
两个源图像都采用相当标准的 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??
Run Code Online (Sandbox Code Playgroud)
混合基色和混合色后,使用混合色的 alpha 混合原始基色和混合产生的颜色:
vec4 baseColor = ...;
vec4 blendColor = ...;
vec4 blendedColor = blend(baseColor, blendColor);
vec4 fragmentColor = (1.0 - blendColor.a) * baseColor + blendColor.a * blendedColor;
Run Code Online (Sandbox Code Playgroud)
我使用它来“叠加”混合不透明的基色和具有大量(半)透明像素的混合纹理。