请教大家一个问题,用wpf画曲线,24条线,每秒钟每条线要操作50个点,其中12条是添加,另外十二条是移除,大家有什么效率比较高的方法提供么?我用ployline的add和remove方法操作,但是CPU占用太高,想要找个处理更高效的方法,大家给点意见吧 谢谢了。(顺便说一下,我是用来画心电图的)
你运气不错,我前不久刚回答过,一下就翻出来了,注意是使用 WriteableBitmap 的那个方案。
按照您提供的方法试了一下,性能方面不错,但是我现在遇到一个问题,每次clear画板的时候,图像都没有被实际清空,反而会在我原来所画的位置呈现出一条直线,这个是为什么?谢谢您的解答~
@惰落流星: clear 画板是啥意思?
@Launcher: backBufferGraphics.Clear(System.Drawing.Color.WhiteSmoke);这个代码~
@惰落流星: 是这里的吗:
if (redraw)
backBufferGraphics.Clear(System.Drawing.Color.WhiteSmoke);
@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时出现了状况的
@惰落流星: 那你需要自己再把思路理清出,我只告诉你标准流程。
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 为无效区
@Launcher: 谢谢~ 后来太忙忘记过来结贴的了,我一个同事给了我一份代码,实现实际上和你这是一样的。谢谢了~
@惰落流星: 遇到同样问题,求解决代码,非常感谢
@惰落流星您好,我也遇到同样的问题,困扰我很久,能把WPF中如何高效绘制曲线的demo发我学习下么?大侠~!邮箱地址qinyi2010@foxmail.com
大侠这个问题解决了麻?能告知我怎么处理的吗,谢谢
@惰落流星 大侠,新手,遇见这个问题,该怎么处理,谢谢