什么是颜色混合(Color Blending)

颜色混合是指将两个颜色混合在一起产生第三个颜色的处理过程。

第一个颜色叫做源颜色(source color)。第二个颜色叫做目标颜色(destination color),这个颜色已经存在(例如在后备缓冲中)。每个颜色都一个单独的的混合因子确定每种颜色在最终图像中的多少。当源颜色和目标颜色乘以各自的混合因子后,最终结果根据指定的混合函数进行合成。通常混合函数只是简单的相加。

完整公式如下所示:

(source × source blend factor) (blend function) (destination × destination blend factor)

源颜色的混合因子是由SourceBlend属性指定的,目标颜色的混合因子是由DestinationBlend属性指定的。BlendFunction属性指定使用的混合函数,通常是BlendFunction.Add,这种情况公式如下表示:

(source × SourceBlend) + (destination × DestinationBlend)

当AlphaBlendEnable属性为false时,在绘制时不进行混合。这种情况中,源像素会覆盖目标像素。当AlphaBlendEnable属性为true时,你可以使用SourceBlend和DestinationBlend属性创建很多特定的效果:

Blend Type Blend Settings
Alpha Blending (source × Blend.SourceAlpha) + (destination × Blend.InvSourceAlpha)
Additive Blending (source × Blend.One) + (destination × Blend.One)
Multiplicative Blending (source × Blend.Zero) + (destination × Blend.SouceColor)
2X Multiplicative Blending (source × Blend.DestinationColor) + (destination × Blend.SourceColor)
图1

图1 这张图片显示了四种常见的混合模式。从左至右分别是:Alpha blending,Additive blending,Multiplicative blending和2X Multiplicative blending。每列上面的图像是源图像,下面是添加了目标图像后的最终效果。

Alpha blending使用源颜色的alpha通道创建一个透明效果。例如,你将后备缓冲清除为 Color.Gray,颜色为(0.5,0.5,0.5,1)。如果你指定带有特定alpha值的Color.White颜色(1,1,1,0.4),将会使用60%的目标颜色和40%的源颜色:(0.5 x 0.6) + (1 x 0.4),结果颜色会是(0.7,0.7,0.7, 1)。alpha值也会相乘- (.6 x 1) + .4结果alpha 值为1。

在某些情况中,alpha blending是自动的。当使用SpriteBatch类绘制精灵时,选择SpriteBlendMode.AlphaBlend会开启alpha blending。

默认情况中,alpha通道会使用SourceBlend和DestinationBlend属性和红、绿、蓝通道进行混合。你也可以使用AlphaSourceBlend和AlphaDestinationBlend只对alpha通道进行混合。当计算alpha通道时,如果SeparateAlphaBlendEnabled为true,这些属性会做为混合因子。


发布时间:2009/6/29 上午8:05:32  阅读次数:12790

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号