WPF - 控制半透明层之间的混合

时间:2009-11-01 09:51:32

标签: .net wpf silverlight color-blending

在数字成像中,当覆盖两个视觉层时,有多种方法可以计算图像,当来自较低层的光以某种方式照射通过障碍层时会产生图像。这可以提供不会出现自然现象的效果,例如倍增颜色。

以下是Photoshop中提供的图层混合模式菜单的示例:


(来源:psdtop.com

如果您不熟悉此主题,我建议您访问文章Understanding Blending Modes。它提供了一个很好的展示每个选项对两层的结果。

据我所知,WPF仅提供“正常”选项。也就是说,以下UI只是混合颜色,就像它们是彩色凝胶一样:

<Grid>
  <Ellipse Width="40" Height="40" Fill="#80FF0000" Margin="16,0,0,0" />
  <Ellipse Width="40" Height="40" Fill="#8000FF00" Margin="32,32,0,0" />
  <Ellipse Width="40" Height="40" Fill="#800000FF" Margin="0,32,0,0" />
</Grid>

看起来像这样:

我想知道是否有办法控制图层混合的方式。

3 个答案:

答案 0 :(得分:7)

你正在寻找的是混合模式,如果你谷歌你会发现很多 。 这是一个简单的example如何使用像素着色器实现它。您可以使用multi-input shader effect

这是一个非常好的complete tutorial,它引导您使用多输入着色器效果创建可重复使用的混合模式库。

作为WPF API的固有部分,混合模式自早期CTP以来经常requested,但从未将其作为产品。

答案 1 :(得分:5)

刚刚遇到这个问题... 但你可以使用我的混合模式库在某些情况下执行此操作(不幸的是有一些限制......我们真的需要将此功能刻录到WPF中API)。

bitbonk引用了我的博客系列中的开头文章...但是每个帖子都有为混合模式库本身附加的源代码和二进制文件。

这是迄今为止的系列(按时间顺序排列)。我想再写一篇关于如何使用这些混合模式的帖子......以及它们带给桌子的价值。

如果我可以指向您使用的一组源代码/二进制文件,那么我将使one使混合模式库不透明。这是适用于WPF和Silverlight的最新和最好的位。具有色调,饱和度,颜色和亮度效果的最终post是该库的仅WPF版本,因为这些效果需要Pixel Shader 3.0,目前只支持WPF 4.0。

祝你好运,如果你使用我的图书馆,请告诉我!

答案 2 :(得分:3)

我相信你必须编写一个自定义着色器效果,以不同的方式制作WPF混合色。

http://msdn.microsoft.com/en-us/library/dd901594(VS.95).aspx 滚动到创建自定义像素着色器效果

我明白,这不是一件小事。有时,使用静态图形资源更容易破坏。我们的UI设计师不能使用WPF颜色混合,因此我们界面的某些部分使用简单的.png文件,他绝对必须让它看起来像某种方式。