你怎么能用面具做自定义绘图?

时间:2011-12-17 00:45:00

标签: wpf render mask custom-renderer

我们有一个控件,我们在OnRender中自己定制绘图。但是,我们希望使用具有透明度的PNG作为各种绘图和通道的模板。如果你愿意的话。

现在我们已经知道我们可以在ImageBrush中简单地使用PNG并将其设置为控件的OpacityMask,但我们实际上想要使用几个不同的模板进行多次绘图。如果我们想要使用OpacityMask路径,我们必须创建单独的控件,单独的ImageMasks,然后将它们全部堆叠在一起,这也会使您的可视树混乱。

我们不想这样做。我们想要在OnRender覆盖单个Control子类中完成所有绘制。我们只是希望这些绘制调用被图像掩盖。然后我们想一遍又一遍地重复这一点,直到我们的绘图完成。

任何方式都可以做到这一点?

1 个答案:

答案 0 :(得分:1)

HA!找到了!奇怪的是S / O社区在这个问题上一直很安静,但是对于那些寻找它的人来说,它被称为DrawingContext.PushOpacityMask(以及相应的'Pop()')并完全按照你的想法行事......它将不透明蒙板(通过画笔)推到DC上,所有后续绘图都相对于画笔的不透明度值。

你也可以为一些非常酷的效果分层'掩码'。它们是附加的,而不仅仅是最后一组。

我很确定内置的OpacityMask只是在OnRender调用中与此函数一起使用。这意味着你仍然可以使用OpacityMask(如果你先推动它),然后使用你自己的面具进行自己的绘图调用。非常整洁的东西!

希望这有助于其他正在寻找此事的人。