[英]Do I need to worry about optimal drawing on canvas?
我要在画布上绘制一个图形(由scrollviewer绑定)。 内存中大约有200个节点。
为了简单起见,我从一个可以自我渲染的usercontrol派生出节点。
但我没有在节点之间创建线条。 我从MSDN了解到,
在表面上,Geometry类和Shape类非常相似。 两者都用于2D图形的渲染,并且都具有从它们派生的类似的具体类,例如,EllipseGeometry和Ellipse。 但是,这两组课程之间存在重要差异。 首先,Geometry类缺少Shape类的一些功能,例如绘制自身的能力。
因为可能有更多的节点,系统可能会慢慢渲染。 因此,为了提高性能,我觉得最好的选择是Geometry(自定义渲染)。
我的问题:
我应该使用Shape或Geometry绘制线条吗?
我应该只渲染scrollviewer的当前视口区域以加快显示速度(在这种情况下我必须将节点从控件转换为几何对象),还是应该迭代所有节点并在它们之间绘制线条?
我应该在位图上的内存中渲染图形然后翻转吗? 听起来更像是一般应用程序编程的游戏编程! :d
WPF不会自动处理渲染视图中的内容以及不能获得更好性能的内容吗?
几点要思考......
从你的主题我得到你不希望节点重绘自己的能力,因为这可能会使它们变慢。 相反,您想要决定何时以及绘制哪个节点。 我对么?
嗯,这看起来不错,但Canvas
从未虚拟化。 我建议通过codeplex网站下载WPFToolkit
源代码。 在DataVisualization
命名空间下,您有几个图表控件(甚至ScatterredChart类似于您的节点之间没有绘制线条的ScatterredChart)及其源代码。 观察他们做了什么。 他们如何提高图表工具的性能。
我还遇到了关于如何实现Scrollable Virtualized Canvas的技巧 。 可能这可以帮助您在画布上实现节点的快速渲染。
亲身...
几何是轻量级的,我喜欢它们。
2] Visual HitTesting可以帮助您了解项目是否在渲染区域下,即在滚动视图的范围内。 否则将其隐藏,以便它不会自己绘制。 “隐藏”而不是“崩溃”,因为滚动的表现会很好。
3]我记得我的同事甚至使用具有水平方向的虚拟化堆叠面板,以便渲染节点和单位视图,即特定于X轴上的一个点的区域,以便这样的重复区域将自动地配合在一起以产生单片图形。
很棒的是故障!
一切顺利,并告诉我们您的进展情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.