0

问题如下:我们有一个应用程序,它在一个名为 Display 的控件中显示实时图像。显示控件内的实时图像顶部可以有(可能是交互式的)层(Display控件基本上是LiveImageLayer底部的网格)。大多数可用图层由线条图形组成,不会遮挡图像。某些层由标准 WPF 控件组成,例如按钮或滑块(使用更改的模板,因此它们使用线条图形呈现)。有些图层甚至直接使用 DrawingContext 绘制。

为了提高实时嘈杂图像上图层图形的可见性和可读性,我们尝试对DropShadow图层进行评估。从视觉的角度来看,这非常有效。但是,从性能的角度来看,它非常糟糕。由于 ImageLayer 的快速更新(高达 60Hz),DropShadow所有图层的效果都以图像更新频率重新计算(即使图层本身没有改变)。

我们可以为每一层手动实现老式的阴影(下面是黑色笔刷的相同图形,向右下方移动)。如果没有更好的方法,我们实际上会这样做。

所以,我的问题是:有没有自动或半自动的方式来实现这种阴影?我想在实际图层下方创建移位矩形,该笔刷设置为实际图层的视觉笔刷。但是,我发现没有办法(除了效果)将视觉画笔重新着色为黑色。

有任何想法吗?

4

1 回答 1

1

不久前,我在使用 shodows 时遇到了类似的性能问题,最后我只是Border用来制作假阴影,但是在我的 Usercontrols 中,我使用了一个LinearGradientBrush使阴影更真实的,但我不记得画笔设置了,但这是它创造的那种效果。

在此处输入图像描述

<Grid>
     <Border Margin="57,74,162,114" BorderThickness="2,0,0,2" CornerRadius="5" BorderBrush="#AA000000">
            <Button Content="StackOverflow" />
    </Border>
</Grid>

EffectsWPF被 CPU 渲染为阴影以解决您所描述的问题,这有点令人遗憾。

于 2013-01-07T21:09:15.520 回答