2013-01-07 61 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

相關問題