C#下实现双缓冲描画高频曲线(GDI+结合GDI)

本文介绍了如何在C#中利用GDI+和GDI实现双缓冲技术,以解决高频实时曲线绘制导致的CPU占用过高的问题。通过在后台使用10倍大小的BUFFER,每次只更新部分内容到前台,降低重绘代价。关键代码包括初始化对象、GDI+曲线绘制、以及使用BitBlt进行屏幕更新。
摘要由CSDN通过智能技术生成

由于项目需要,要使用c#描画高频实时曲线.

但是在C#下由于描画图像使用的是GDI+,描画效率很有问题.一旦曲线太多,就会造成CPU使用率直线上升,马上飙升到100%.

在GDI+下使用双缓冲也无济于事,双缓冲本身只会解决曲线多的时候全屏闪烁问题,但描画效率还是严重低下.

其间用过多种解决方案:DRECT3D,DRIRECT2D,GDI,,,,,等等等等

最后从效率出发,最终解决方案如下:

前台显示使用GDI,而后台描画则采用GDI+

后台采用10倍于前台窗口的BUFFER,每次向其中画一条线.然后通过一个RECT视口,每次向前台显示视口里的内容.否则每次重绘的代价太高.

这个方法实现的难点主要在于GDI和GDI+的结合部分,主要代码如下:

1.函数库:using 和 WIN32API函数

  1. using System.Runtime.InteropServices;
  2. using System.Drawing;
  3. using System.Drawing.Imaging;
  4. using System.Drawing.Drawing2D;
  5. using System.Drawing.Text;
  6. [DllImport("gdi32")]
  7. public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
  8. [DllImport("gdi32")]
  9. public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject);
  10. [DllImport("GDI32.dll")]
  11. public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值