2013-01-07 48 views
0

问题在于:我们有一个应用程序在名为Display的控件中显示实时图像。在Display控件的实时图像上可能会有(可能是交互式的)图层(Display控件基本上是一个带有底部的LiveImageLayer的网格)。大多数可用的图层由线图形组成,不会遮挡图像。某些图层由标准的WPF控件(如按钮或滑块)组成(使用更改后的模板,以便使用线条图形进行渲染)。有些图层甚至直接使用DrawingContext绘制。在不使用效果的情况下在WPF中创建阴影

为了提高活动噪声图像上层图形的可见性和可读性,我们试图将DropShadow效果分配给图层。从视觉角度来看,这非常有效。然而,从性能角度来看,这是非常糟糕的。由于ImageLayer的快速更新(高达60Hz),DropShadow效果被重新计算为具有图像更新频率的所有图层(即使图层本身不会更改)。

对于每个图层,我们都可以手动实现老式阴影(下面的黑色笔和相同图形,移到右下角)。如果没有更好的方法,我们会实际做到。

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

任何想法?

回答

1

我曾与shodows类似的性能问题而回,最后我只使用Border做一个假的影子,但是在我的用户控件我用LinearGradientBrush这让阴影有点更真实的,但我不记得刷设置,但这是它创建的效果。

enter image description here

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

它有点令人失望的是WPF Effects的CPU渲染为阴影解决像你描述的问题的。

+0

你好,谢谢你的回复。不幸的是,这并不能解决我们的问题 - 我们需要在复杂的几何图形上创建阴影(例如,想象圆圈(未填充),尺寸和显示其直径的文本)。 – zvrastil

相关问题