【发布时间】:2011-02-06 17:46:14
【问题描述】:
System.Drawing.Graphics 类有一个带有两个选项的 CompositionMode 属性:SourceOver(它基于 alpha 组件,将绘制的任何内容与现有的背景混合)或 SourceCopy,它只是用正在绘制的任何内容覆盖背景.
WPF 中是否存在类似的东西?
在 WPF 中,当我在另一个之上绘制一条折线时,新的折线总是与背景混合。我认为这与正在使用的容器无关。我正在使用画布,但在任何地方都找不到混合模式属性。我要做的就是上面提到的SourceCopy compositionmode 所做的。 IE。新的折线应该简单地覆盖画布上已有的内容。
有没有一种简单的方法可以做到这一点,而不是使用像素着色器(据我所知,这无论如何都行不通,因为我无法访问 Canvas 后台缓冲区)。
我不拘泥于 Canvas,并且很乐意使用任何支持覆盖模式的容器。
我目前有一个基于 WriteableBitmap 的解决方案,我为其获取 System.Drawing.Graphics 上下文,然后操作 CompositionMode。它可以工作,但由于我的窗口是全屏的,因此该解决方案会对性能产生严重影响。
说明和示例: WPF 窗口是完全透明的,画布也是如此(背景颜色(0,0,0,0))。现在我用 Color.FromArgb(128,128,0,0) 绘制一条折线。我现在有一条半透明的红色折线。接下来,我使用 Color.FromArgb(0,0,0,0) 绘制相同的折线。由于发生了 alpha 混合,结果与以前相同。然而,我想要的是用第二条折线擦除红色折线(这正是 Graphics 类中的 SourceCopy 模式所做的。
【问题讨论】:
标签: wpf alphablending