C# WPF画布作为数学绘图区域
在我的图形计算器中,我使用画布作为一个平面,在这个平面上渲染函数的图形。我注意到,每当我输入复杂的函数时(我使用贝塞尔曲线,因此函数越复杂->需要渲染的点越多,图形看起来就越平滑),它就会变得非常滞后,总体上表现不好 以下哪种解决方案的计算成本最低/因此是最佳方法 1。(我当前的解决方案)在ScrollViewer中使用巨大的画布,限制查看区域 我发现:C# WPF画布作为数学绘图区域,c#,wpf,xaml,math,canvas,C#,Wpf,Xaml,Math,Canvas,在我的图形计算器中,我使用画布作为一个平面,在这个平面上渲染函数的图形。我注意到,每当我输入复杂的函数时(我使用贝塞尔曲线,因此函数越复杂->需要渲染的点越多,图形看起来就越平滑),它就会变得非常滞后,总体上表现不好 以下哪种解决方案的计算成本最低/因此是最佳方法 1。(我当前的解决方案)在ScrollViewer中使用巨大的画布,限制查看区域 我发现: 渲染整个画布,甚至是不可见的部分 当画布上的元素超过50K时,开始延迟 2。仅使用不太大的画布,并通过TransformMatrix管
- 渲染整个画布,甚至是不可见的部分
- 当画布上的元素超过50K时,开始延迟
- 当它不得不重新绘制和重新计算所有动态数据时,它会不会更加滞后
任何帮助都将不胜感激。如果您可以避免,您真的不想使用离散的视觉效果来表示图表之类的东西;它们非常沉重,并且不断参与输入处理和布局。我建议直接使用WPF的绘图/几何API。我建议实现一个自定义控件,它执行自己的呈现(请参见
OnRender
)。我还建议实现IScrollInfo
,以便您可以管理自己的滚动:您将始终知道视口的大小和位置,这使您可以选择在滚动时使几何体无效,然后仅重建图形中实际在视图中的部分。这将大大减少开销。您看过BitmapCache吗?谢谢,这可能有助于解决渲染问题!但“画布问题的正确选择”依然存在。是的,我知道,但像这样的问题很难回答,你需要自己测量和实验。我想一定大小的画布加上BitmapCache就可以了。谢谢,我会试试的。