c# 快速画多条曲线 用什么方法靠谱

徐小Mo 2014-09-05 11:12:28
c#需要画多条曲线,一条曲线可能有上万个点,要显示多条曲线,有做过的坛友给个提示。已经用zedgraph试过,效果不好,一卡一卡,而且在单独线程中运行还会影响别的线程运行。
...全文
356 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
uhen 2014-09-10
  • 打赏
  • 举报
回复
看不懂。。。
  • 打赏
  • 举报
回复
绘制贝塞尔曲线 private void Draw_Click(object sender, EventArgs e) { Graphics graphics = this.CreateGraphics();//实例化一个GDI+绘图图面类对象 Pen myPen = new Pen(Color.Blue, 3);//实例化一个用于绘制直线和曲线的对象 float startX = 50.0F;//实例化起始点的x坐标 float startY = 80.0F;//实例化起始点的y坐标 float controlX1 = 200.0F;//实例化第一个控制点的x坐标 float controlY1 = 20.0F;//实例化第一个控制点的y坐标 float controlX2 = 100.0F;//实例化第二个控制点的x坐标 float controlY2 = 10.0F;//实例化第二个控制点的y坐标 float endX = 190.0F;//实例化结束点的x坐标 float endY = 40.0F;//实例化结束点的y坐标 graphics.DrawBezier(myPen, startX, startY, controlX1, controlY1, controlX2, controlY2, endX, endY);//绘制由4个表示点的有序坐标对定义的贝塞尔样条 }
卧_槽 2014-09-09
  • 打赏
  • 举报
回复
引用 11 楼 shmily0923 的回复:
[quote=引用 10 楼 yuwenge 的回复:] [quote=引用 9 楼 shmily0923 的回复:] [quote=引用 8 楼 yuwenge 的回复:] 如果点的计算不花时间的话,单纯绘制几万个点应该是毫米级的。不知道你代码怎么写的,帮不到你。 不过屏幕就这么大,画了很多个几万个点,是不是屏幕已经满了?你准备给人家看什么?
我画的点现在减少一些了。但是还是有点问题。我没有用什么复杂的方法,就是用的zedgraph控件。直接向添加点就绘制了。你说的是什么方法,可有例程[/quote] lockbitmap方法,然后直接通过指针操作。我相信zedgraph底层应该也是这样实现的,如果不是,那就只能说zedgraph是个悲剧。 至于你使用zedgraph时效率低,首先你得找出效率低在神马地方,到底时绘制时间过长,还是数据组织时间过长,还是对zedgraph调用出现其他情况,比如绘制次数太多等等。 画图其实很简单,就是组织数据然后填充,GDI+填充的效率非常高,你几乎不应该考虑填充数据耗时的问题,除非你想做动画。[/quote]需要做成示波器样式,数据填充没有问题,现在的问题应该是画图刷新问题[/quote] gdi+做不了,换wpf才是正道。windows消息循环不是用来播放动画的。
徐小Mo 2014-09-09
  • 打赏
  • 举报
回复
引用 10 楼 yuwenge 的回复:
[quote=引用 9 楼 shmily0923 的回复:] [quote=引用 8 楼 yuwenge 的回复:] 如果点的计算不花时间的话,单纯绘制几万个点应该是毫米级的。不知道你代码怎么写的,帮不到你。 不过屏幕就这么大,画了很多个几万个点,是不是屏幕已经满了?你准备给人家看什么?
我画的点现在减少一些了。但是还是有点问题。我没有用什么复杂的方法,就是用的zedgraph控件。直接向添加点就绘制了。你说的是什么方法,可有例程[/quote] lockbitmap方法,然后直接通过指针操作。我相信zedgraph底层应该也是这样实现的,如果不是,那就只能说zedgraph是个悲剧。 至于你使用zedgraph时效率低,首先你得找出效率低在神马地方,到底时绘制时间过长,还是数据组织时间过长,还是对zedgraph调用出现其他情况,比如绘制次数太多等等。 画图其实很简单,就是组织数据然后填充,GDI+填充的效率非常高,你几乎不应该考虑填充数据耗时的问题,除非你想做动画。[/quote]需要做成示波器样式,数据填充没有问题,现在的问题应该是画图刷新问题
卧_槽 2014-09-09
  • 打赏
  • 举报
回复
引用 9 楼 shmily0923 的回复:
[quote=引用 8 楼 yuwenge 的回复:] 如果点的计算不花时间的话,单纯绘制几万个点应该是毫米级的。不知道你代码怎么写的,帮不到你。 不过屏幕就这么大,画了很多个几万个点,是不是屏幕已经满了?你准备给人家看什么?
我画的点现在减少一些了。但是还是有点问题。我没有用什么复杂的方法,就是用的zedgraph控件。直接向添加点就绘制了。你说的是什么方法,可有例程[/quote] lockbitmap方法,然后直接通过指针操作。我相信zedgraph底层应该也是这样实现的,如果不是,那就只能说zedgraph是个悲剧。 至于你使用zedgraph时效率低,首先你得找出效率低在神马地方,到底时绘制时间过长,还是数据组织时间过长,还是对zedgraph调用出现其他情况,比如绘制次数太多等等。 画图其实很简单,就是组织数据然后填充,GDI+填充的效率非常高,你几乎不应该考虑填充数据耗时的问题,除非你想做动画。
徐小Mo 2014-09-09
  • 打赏
  • 举报
回复
引用 8 楼 yuwenge 的回复:
如果点的计算不花时间的话,单纯绘制几万个点应该是毫米级的。不知道你代码怎么写的,帮不到你。 不过屏幕就这么大,画了很多个几万个点,是不是屏幕已经满了?你准备给人家看什么?
我画的点现在减少一些了。但是还是有点问题。我没有用什么复杂的方法,就是用的zedgraph控件。直接向添加点就绘制了。你说的是什么方法,可有例程
徐小Mo 2014-09-05
  • 打赏
  • 举报
回复
引用 1 楼 good_jobs 的回复:
保持曲线形状的特征点抽稀算法,减少点的个数。每次缩放时调用该方法。
道格拉斯-普克抽稀算法可以试试,我去试试看
徐小Mo 2014-09-05
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
你曲线上有几百个点就够他们看了,弄上万个点,一眼又看不全,还要来回拖拽 你到底是做采集还是客户端啊 不要老混为一体啊
我仅仅显示30秒的数据 历史数据移除了
於黾 2014-09-05
  • 打赏
  • 举报
回复
采集软件里,要么就只记录个最大值,最小值,看个大体的趋势走向 要么记录最新的几百条,丢弃过期数据 想看详细的,上查询历史里去慢慢看啊 有任何必要在采集软件上操作UI的东西么
xian_wwq 2014-09-05
  • 打赏
  • 举报
回复
zedgraph加载超过2000点用户体验就不好了 但其实加载过多,对于用户也没有用, 建议加载主要的样本点,然后细节在框选放大的时候再处理
於黾 2014-09-05
  • 打赏
  • 举报
回复
你曲线上有几百个点就够他们看了,弄上万个点,一眼又看不全,还要来回拖拽 你到底是做采集还是客户端啊 不要老混为一体啊
於黾 2014-09-05
  • 打赏
  • 举报
回复
还是那个问题 你不敢把过期数据移出曲线么 非要连历史一起显示 想看历史,让他们到查询软件上去查历史
good_jobs 2014-09-05
  • 打赏
  • 举报
回复
保持曲线形状的特征点抽稀算法,减少点的个数。每次缩放时调用该方法。
卧_槽 2014-09-05
  • 打赏
  • 举报
回复
如果点的计算不花时间的话,单纯绘制几万个点应该是毫米级的。不知道你代码怎么写的,帮不到你。 不过屏幕就这么大,画了很多个几万个点,是不是屏幕已经满了?你准备给人家看什么?

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧