在WPF中更改Alpha混合模式?

时间:2011-02-06 05:08:44

标签: wpf alphablending

System.Drawing.Graphics类有一个属性CompositionMode,它有两个选项:SourceOver(基于alpha组件,混合使用已存在的背景绘制的任何内容)或SourceCopy,它只是用正在绘制的内容覆盖背景

WPF中是否存在类似内容?

在WPF中,当我在另一个上面绘制PolyLine时,新的PolyLine总是与背景混合。我认为这与使用的容器无关。我正在使用Canvas但无法在任何地方找到混合模式属性。我想要做的是上面提到的SourceCopy组合模式。即新的PolyLine应该简单地覆盖Canvas上已有的东西。

有没有一种简单的方法可以做到这一点,没有使用像素着色器(据我所知 - 它无论如何都无法工作,因为我无法访问Canvas后台缓冲区)。

我没有使用Canvas,并且很乐意使用任何支持覆盖模式的容器。

我目前有一个基于WriteableBitmap的解决方案,我获取了System.Drawing.Graphics上下文,然后操作CompositionMode。它可以工作,但由于我的窗口全屏,解决方案会对性能产生严重影响。

澄清和示例: WPF窗口是完全透明的,Canvas(背景颜色(0,0,0,0))也是如此。现在我使用Color.FromArgb(128,128,0,0)绘制PolyLine。我现在有一条半透明的红色折线。接下来,我使用Color.FromArgb(0,0,0,0)绘制相同的PolyLine。由于发生了α混合,结果与之前相同。然而,我想要的是用第二条折线擦除红色折线(这正是Graphics类中的SourceCopy模式所做的。

2 个答案:

答案 0 :(得分:0)

我认为您需要做的就是确保用于填充/描边PolyLine的画笔具有完全不透明的alpha值(即255)。然后不应将背景融入其中。

答案 1 :(得分:0)

你可以应用一个剪贴蒙版,这样你可以提供剪切它下面元素的路径,但是在需要修剪很多元素之后可能很难维护...