2017-03-22 88 views
0

我需要使用WPF渲染一些幾何圖形。由於UI開銷,我不想使用形狀。我想通過drawingContext進行渲染。現在有不同的方法來達成drawingContext。據我所知,一個選擇是使用繪圖類的後代,例如Drawinggroup,請參見:WPF渲染:使用DrawingImage與DrawingVisual來獲得drawingContext

using(var context = System.Windows.Media.drawingGroup.Open()) 
     { 
     context.DrawGeometry(Brushes.Blue, shapeOutlinePen, polygon); 
     } 

有了,我可以創造一個DrawingImage,爲了顯示使用它作爲一個的ImageSource見:

var drawingImage = new DrawingImage(drawingGroup); 
    this.image1.Source = drawingImage; 

另一種選擇是使用DrawingVisual類,像這樣:

var visual = new DrawingVisual(); 
    using (DrawingContext context = visual.RenderOpen()) 
     { 
     context.DrawGeometry(Brushes.Blue, shapeOutlinePen, polygon1); 
     context.DrawGeometry(Brushes.Blue, shapeOutlinePen, polygon2); 
     context.Close(); 
     } 

    collection.Add(visual); 

在這種情況下采集是使用FrameworkElement的作爲VisualCollection它的主人(父母)。這個Frameworkelement可以在用戶界面中使用,以顯示視覺效果。

現在我的問題(S):

  • 是否有更多的方式來實現這一目標?
  • 你如何決定走哪條路?
  • Drawingimage提供DrawingVisual不提供什麼? (或者其他方式 左右)
  • 這兩種方式都有哪些後果?
  • 性能和/或多線程考慮如何?

Thanx爲所有您​​的輸入!

回答

0

使用DrawingContext將是一個衍生的UIElement或FrameworkElement的的覆蓋OnRender方法最簡單和直接的方式:

public class SimpleDrawing : UIElement 
{ 
    protected override void OnRender(DrawingContext drawingContext) 
    { 
     base.OnRender(drawingContext); // not strictly necessary 

     // your rendering code goes here 
    } 
} 
+0

感謝名單我將測試此(第三)的方法!然而,仍然猶豫不決,爲什麼...... – brun0