【问题标题】:WPF Rendering: Using DrawingImage vs. DrawingVisual in order to receive a drawingContextWPF 渲染:使用 DrawingImage 与 DrawingVisual 以接收 drawingContext
【发布时间】:2017-03-22 10:19:47
【问题描述】:

我需要使用 WPF 渲染一些几何图形。我不想使用形状,因为它们的 UI 开销。我想通过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);

在这种情况下,集合是一个 VisualCollection,它使用一个 Frameworkelement 作为它的宿主(父)。可以在 UI 中使用此框架元素来显示视觉效果。

现在回答我的问题:

  • 还有更多方法可以实现这一目标吗?
  • 您如何决定走哪条路?
  • Drawingimage 提供了 DrawingVisual 不提供的功能? (或者其他方式 左右)
  • 这两种方法都有什么后果?
  • 性能和/或多线程注意事项如何?

感谢您的所有输入!

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    使用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
        }
    }
    

    【讨论】:

    • 谢谢我将测试这个(第三)方法!但是,仍然没有决定要走的路以及为什么......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2010-10-22
    相关资源
    最近更新 更多