首页 新闻 会员 周边 捐助

WPF中如何高效绘制曲线

0
[已解决问题] 解决于 2014-05-12 16:39

请教大家一个问题,用wpf画曲线,24条线,每秒钟每条线要操作50个点,其中12条是添加,另外十二条是移除,大家有什么效率比较高的方法提供么?我用ployline的add和remove方法操作,但是CPU占用太高,想要找个处理更高效的方法,大家给点意见吧 谢谢了。(顺便说一下,我是用来画心电图的)

惰落流星的主页 惰落流星 | 菜鸟二级 | 园豆:222
提问于:2014-03-28 17:56
< >
分享
最佳答案
1

你运气不错,我前不久刚回答过,一下就翻出来了,注意是使用 WriteableBitmap 的那个方案。

http://social.msdn.microsoft.com/Forums/zh-CN/febcee07-dc8b-44b4-8c0a-246daffdbe2b/wpf-?forum=wpfzhchs

奖励园豆:5
Launcher | 高人七级 |园豆:45050 | 2014-03-28 18:01

按照您提供的方法试了一下,性能方面不错,但是我现在遇到一个问题,每次clear画板的时候,图像都没有被实际清空,反而会在我原来所画的位置呈现出一条直线,这个是为什么?谢谢您的解答~

惰落流星 | 园豆:222 (菜鸟二级) | 2014-04-01 11:05

@惰落流星: clear 画板是啥意思?

Launcher | 园豆:45050 (高人七级) | 2014-04-01 11:12

@Launcher: backBufferGraphics.Clear(System.Drawing.Color.WhiteSmoke);这个代码~

惰落流星 | 园豆:222 (菜鸟二级) | 2014-04-01 11:24

@惰落流星: 是这里的吗:

if (redraw)
   backBufferGraphics.Clear(System.Drawing.Color.WhiteSmoke);

Launcher | 园豆:45050 (高人七级) | 2014-04-01 11:34

@Launcher: 嗯,不过我把逻辑改了下的,

if (xValue == 0)
{

using (Bitmap backBufferBitmap = new Bitmap(width, height,
this.bitmap.BackBufferStride, System.Drawing.Imaging.PixelFormat.Format24bppRgb,
this.bitmap.BackBuffer))
{

......
using (Graphics backBufferGraphics = Graphics.FromImage(backBufferBitmap))
{
backBufferGraphics.Clear(System.Drawing.Color.Empty);
backBufferGraphics.Flush();
}
}

......这个代码里我做清除的,然后这个clear时出现了状况的

惰落流星 | 园豆:222 (菜鸟二级) | 2014-04-01 11:41

@惰落流星: 那你需要自己再把思路理清出,我只告诉你标准流程。

private WriteableBitmap bitmap; // 用于保存最近一次绘制的图像

每次数据更新时,根据你的选择重新或不重新在 bitmap 上绘制图形,如下:

Bitmap backBufferBitmap = new Bitmap(.....,bitmap.BackBuffer);

Graphics backBufferGraphics = Graphics.FromImage(backBufferBitmap);

backBufferGraphics.Clear(System.Drawing.Color.WhiteSmoke); // 清空原图像

backBufferGraphics.DrawLines(System.Drawing.Pens.Green, points);  // 画图形。
backBufferGraphics.Flush();

到现在为止,我们只是把新的图像绘制到了 bitmap 上,接下来你需要将图像呈现到界面上:

bitmap.AddDirtyRect(new Int32Rect(0, 0, width, height)); // 设置整个 bitmap 为无效区

 

http://msdn.microsoft.com/zh-cn/library/vstudio/system.windows.media.imaging.writeablebitmap.adddirtyrect(v=vs.100).aspx

Launcher | 园豆:45050 (高人七级) | 2014-04-01 11:49

@Launcher: 谢谢~ 后来太忙忘记过来结贴的了,我一个同事给了我一份代码,实现实际上和你这是一样的。谢谢了~

惰落流星 | 园豆:222 (菜鸟二级) | 2014-05-12 16:39

@惰落流星: 遇到同样问题,求解决代码,非常感谢

sunshine08726 | 园豆:200 (初学一级) | 2015-12-18 16:21
其他回答(2)
0

@惰落流星您好,我也遇到同样的问题,困扰我很久,能把WPF中如何高效绘制曲线的demo发我学习下么?大侠~!邮箱地址qinyi2010@foxmail.com

潜心求教 | 园豆:204 (菜鸟二级) | 2014-10-22 14:53

大侠这个问题解决了麻?能告知我怎么处理的吗,谢谢

支持(0) 反对(0) Mao923 | 园豆:202 (菜鸟二级) | 2019-12-16 16:10
0

@惰落流星 大侠,新手,遇见这个问题,该怎么处理,谢谢

Mao923 | 园豆:202 (菜鸟二级) | 2019-12-16 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册