5

在数字成像中,当叠加两个可视层时,您可以通过多种方式计算当来自较低层的光以某种方式穿过阻挡层时产生的图像。这可以提供不作为自然现象发生的效果,例如颜色相乘。

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


(来源:psdtop.com

如果您不熟悉此主题,我建议您访问文章了解混合模式。它很好地展示了每个选项针对两层的结果。

据我所知,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>

看起来像这样:

我想知道是否有任何方法可以控制图层混合的方式。

4

3 回答 3

7

您正在寻找的是所谓的混合模式。

这是一个如何使用像素着色器实现它的简单示例。您将为此使用多输入着色器效果

这是一个非常好的完整教程 ,将引导您使用多输入着色器效果创建可重用的混合模式库。

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

于 2009-11-01T11:14:53.703 回答
5

刚刚遇到了这个问题……但是您可以在某些情况下使用我的混合模式库来执行此操作(不幸的是,存在一些限制……我们确实需要将此功能烧入 WPF API)。

bitbonk 引用了我的博客系列中的开始文章……但每篇文章都附有混合模式库本身的源代码和二进制文件。

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

如果我可以向您指出要使用的一组源代码/二进制文件,那将是让混合模式库不透明度感知的那个。这是适用于 WPF 和 Silverlight 的最新和最棒的部分。具有色调、饱和度、颜色和亮度效果的最后一篇文章是库的仅 WPF 版本,因为这些效果需要 Pixel Shader 3.0,目前只有 WPF 4.0 支持。

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

于 2009-12-11T20:25:26.787 回答
3

我相信您必须编写自定义着色器效果才能以不同的方式使 WPF 混合颜色。

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

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

于 2009-11-01T10:44:24.917 回答