【发布时间】:2012-06-09 10:52:18
【问题描述】:
需要使用 .NET 框架来可视化大量 2d 图形对象(绘制一些复杂结构的模式) - 例如在一个画布上 10-20,000 个图元。假设我们有各自的硬件 - 具有多核 CPU、大量 RAM 和一些最新显卡的强大服务器 PC。根据书籍和 MSDN,解决方案是使用 WPF 及其硬件加速,特别是绘图子系统。我已经用 GeometryDrawings 和 VisualHost 实现了简单的场景,它相当不错,但有一个问题 - 可视化对象还需要具有不断变化的状态(即快速更改颜色而不重绘)并接受鼠标事件(单击、拖放) Freezables 不支持,因为它们不是框架元素。任何想法如何最有效地解决问题?我们的图形对象看起来非常像框架提供的 Shape 及其后代,但它肯定不符合性能要求。
* 编辑 *
图形对象可以具有简单的结构(红色矩形)和复杂的(包含路径的多个嵌套对象 - 随机形状的曲线)。对象可能重叠。分层(在某个特定时刻隐藏和显示特定对象)可以稍后作为附加功能实现。状态变化可能每 2-5 秒发生一次,由外部事件触发。
【问题讨论】:
-
更多细节会有所帮助。你的 10k 基元有多大?什么屏幕分辨率?它们重叠吗?它们是否总是可见的(或隐藏在其他下面?)
-
我在
picturebox中绘制了带有 >10000 条观察值的移动图,即使使用鼠标事件突出显示单击的特定线条,它也能完美工作。你在picturebox上试过了吗? -
已编辑问题提供更多详细信息。
-
如果你保持图形对象的层次顺序并且你在某些点有位图图像(低于 20k 基元),那么你可以加载位图(如果内存是问题,甚至将它保存在文件中)并在此之上执行图形事件以减少绘制图形未更改部分的时间 - 只是一个建议。
标签: .net graphics visualization