【发布时间】: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 不提供的功能? (或者其他方式 左右)
- 这两种方法都有什么后果?
- 性能和/或多线程注意事项如何?
感谢您的所有输入!
【问题讨论】: