繁体   English   中英

我是否需要担心画布上的最佳绘图?

[英]Do I need to worry about optimal drawing on canvas?

我要在画布上绘制一个图形(由scrollviewer绑定)。 内存中大约有200个节点。

为了简单起见,我从一个可以自我渲染的usercontrol派生出节点。

但我没有在节点之间创建线条。 我从MSDN了解到,

在表面上,Geometry类和Shape类非常相似。 两者都用于2D图形的渲染,并且都具有从它们派生的类似的具体类,例如,EllipseGeometry和Ellipse。 但是,这两组课程之间存在重要差异。 首先,Geometry类缺少Shape类的一些功能,例如绘制自身的能力。

因为可能有更多的节点,系统可能会慢慢渲染。 因此,为了提高性能,我觉得最好的选择是Geometry(自定义渲染)。

我的问题:

  1. 我应该使用Shape或Geometry绘制线条吗?

  2. 我应该只渲染scrollviewer的当前视口区域以加快显示速度(在这种情况下我必须将节点从控件转换为几何对象),还是应该迭代所有节点并在它们之间绘制线条?

  3. 我应该在位图上的内存中渲染图形然后翻转吗? 听起来更像是一般应用程序编程的游戏编程! :d

  4. WPF不会自动处理渲染视图中的内容以及不能获得更好性能的内容吗?

几点要思考......

从你的主题我得到你不希望节点重绘自己的能力,因为这可能会使它们变慢。 相反,您想要决定何时以及绘制哪个节点。 我对么?

嗯,这看起来不错,但Canvas从未虚拟化。 我建议通过codeplex网站下载WPFToolkit源代码。 DataVisualization命名空间下,您有几个图表控件(甚至ScatterredChart类似于您的节点之间没有绘制线条的ScatterredChart)及其源代码。 观察他们做了什么。 他们如何提高图表工具的性能。

我还遇到了关于如何实现Scrollable Virtualized Canvas的技巧 可能这可以帮助您在画布上实现节点的快速渲染。

亲身...

几何是轻量级的,我喜欢它们。

2] Visual HitTesting可以帮助您了解项目是否在渲染区域下,即在滚动视图的范围内。 否则将其隐藏,以便它不会自己绘制。 “隐藏”而不是“崩溃”,因为滚动的表现会很好。

3]我记得我的同事甚至使用具有水平方向的虚拟化堆叠面板,以便渲染节点和单位视图,即特定于X轴上的一个点的区域,以便这样的重复区域将自动地配合在一起以产生单片图形。

很棒的是故障!

一切顺利,并告诉我们您的进展情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM