WPF渲染:使用DrawingImage与DrawingVisual接收drawingContext

时间:2017-03-22 10:19:47

标签: c# wpf

我需要使用WPF渲染一些几何体。我不想因为UI开销而使用形状。我想通过drawingContext渲染。现在有不同的方法来达到drawingContext。据我所知,一个选项是使用Drawing类的后代,例如Drawinggroup,请参阅:

 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);

在这种情况下,collection是一个VisualCollection,它使用Frameworkelement作为其主机(父)。可以在UI中使用此Frameworkelement以显示视觉效果。

现在问我的问题:

  • 还有更多方法可以实现这个目标吗?
  • 您如何决定走哪条路?
  • Drawingimage提供的是什么DrawingVisual没有? (或者另一种方式 周围)
  • 无论哪种方式都有哪些后果?
  • 性能和/或多线程考虑因素如何?

用于所有输入的Thanx!

1 个答案:

答案 0 :(得分: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
    }
}