【发布时间】:2012-04-16 11:02:37
【问题描述】:
我正在 WPF 中制作路线规划程序,我需要显示一个地图,该地图是具有数万条边的图形对象。如果我还想与此地图进行交互(例如缩放、移动、选择边缘),那么绘制这些线的最佳选择是什么?我尝试过的所有选项都导致渲染性能非常慢。
【问题讨论】:
我正在 WPF 中制作路线规划程序,我需要显示一个地图,该地图是具有数万条边的图形对象。如果我还想与此地图进行交互(例如缩放、移动、选择边缘),那么绘制这些线的最佳选择是什么?我尝试过的所有选项都导致渲染性能非常慢。
【问题讨论】:
你可以使用Shape,与这些对象交互特别简单,但如果你正在处理数千条边我建议使用DrawingVisual类,一个可以用来渲染矢量图形的可视对象屏幕及其 RenderOpen 方法。我有一个 similar problem 给你,我已经使用 DrawingContext 来绘制我的边缘来提高我的应用程序的性能。
要进行缩放,您必须使用转换,尤其是 ScaleTrasnform,并将转换应用于您的面板或形状。
DrawingVisual 不提供事件处理,因此如果使用 Shape 可以使用事件与边缘交互,使用 DrawingVisual 则需要实现 Hit-Testing。
【讨论】:
要提高绘图性能,您必须避免一次渲染所有线条。即使使用较低级别的视觉效果,您也无法提高性能。
你必须遵循这些事情:
【讨论】:
如果您必须使用 WPF,请查看 DrawingVisual 类。这可以访问将提供更快性能的低级绘图图元。但是,当您处理较低级别的对象时,您必须自己处理焦点和命中测试等事情。在这里查看有关 DrawingVisuals 的 msdn 条目:
http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.aspx http://msdn.microsoft.com/en-us/library/ms742254.aspx
【讨论】: