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

.net WPF-控制半透明层之间的混合,.net,wpf,silverlight,color-blending,.net,Wpf,Silverlight,Color Blending,在数字成像中,当叠加两个视觉层时,有多种方法可以计算来自较低层的光线以某种方式照射通过障碍层时产生的图像。这可以提供不作为自然现象出现的效果,例如倍增颜色 以下是Photoshop中提供的图层混合模式菜单示例: (来源:) 如果你不熟悉这个话题,我建议你去看看这篇文章。它提供了一个伟大的展示结果的每个选项对两层 据我所知,WPF只提供了“正常”选项。也就是说,以下UI只是混合颜色,就像它们是彩色凝胶一样: <Grid> <Ellipse Width="40&qu

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

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


(来源:)

如果你不熟悉这个话题,我建议你去看看这篇文章。它提供了一个伟大的展示结果的每个选项对两层

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

看起来是这样的:


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

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

滚动至创建自定义像素着色器效果


我明白,这不是一件小事。有时,使用静态图形资源更容易妥协。我们的UI设计师无法使用WPF颜色混合,因此我们界面的某些部分使用简单的.png文件,而他必须让它以某种方式显示。

您正在寻找的是混合模式

下面是如何使用像素着色器实现的简单示例。你会用这个

下面是一个非常好的示例,它引导您使用多输入着色器效果创建可重用的混合模式库


混合模式作为WPF API的一个固有部分,从早期CTP开始就经常出现,但从未出现在产品中。

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

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

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

如果我能为您指出一组要使用的源代码/二进制文件,那就是我让混合模式库知道不透明度的地方。这是在WPF和Silverlight上工作的最新和最好的位。具有色调、饱和度、颜色和亮度效果的最终版本是仅WPF版本的库,因为这些效果需要像素着色器3.0,目前只有WPF 4.0支持


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

谢谢你。不幸的是,他们没有得到支持,但亚当·斯密在你提供的链接中很好地解释了为什么会出现这种情况。Cory Plott的三部分教程也很适合阅读。感谢Drew的称赞!该系列现在有6篇文章,我的脑海中还有一篇计划。为你在这方面的工作干杯。我同意在框架本身中支持这一点将是非常好的(Adam Smith以某种方式解释了为什么它还没有在框架中)。谢谢Drew。是的,很好的解释。。。不是吗。您会注意到我在帖子中发表了评论。:)这些东西适用于WinRT/Windows应用商店应用程序吗?我有一些东西需要一些“暗”混合模式。@ananthonline这是个好问题。目前,可用的东西仅适用于WPF和Silverlight。另外,我不知道WinRT XAML堆栈是否支持GPU效果。。。如果是这样的话,那么您很可能会使用Silverlight版本并构建一个WinRT版本的库。