c# - 高效使用OnPaint

标签 c# .net graphics onpaint

我在 Visual Studio .Net 中使用 C# 进行编程。

我正在创建自己的控件,它根据从模数转换器 (ADC) 获得的值绘制波形。我获取传入点并将它们转换为 X 和 Y 点,以便在我的控件中正确绘制图形。

我的 OnPaint 方法中有一个循环,它遍历所有点并在当前点和下一个点之间调用 DrawLine 方法。

但是,这是非常低效的,因为其中一些图表有 8192 个点,而系统实际上有 9 个我想同时显示的 ADC。每次重绘页面时,所有图形都需要几乎一秒钟的时间来重绘(尤其是在调试期间)。

除此之外,我还提供了一些功能,允许您放大和平移波浪以获得更好的 View (就像谷歌地图一样)并且所有 9 个波浪一起放大和平移。

所有这些功能都非常“不稳定”,因为我在 mousewheel 和 mousemove 上调用 invalidate。基本上,一切正常,但没有我想要的那么顺利。

我想知道是否有一种方法可以从数据中创建一个预绘制的对象,然后在绘图区域中绘制一个放大和平移的图片版本。

即使只是为我指明正确的方向,我们也将不胜感激。

最佳答案

创建一个 Bitmap 对象,并绘制它。

在您的 Paint 处理程序中,只需将位图 blit 到屏幕。

这将使您能够将更改比例与重新呈现数据分离开来。

关于c# - 高效使用OnPaint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1924345/

相关文章:

c# - C#中的原型(prototype)设计模式

c# - 为我的应用程序制作属性处理程序以将自定义属性添加到文件格式

c# - RavenDB 中的子字符串搜索

algorithm - 如何计算多条曲线的 OBB?

algorithm - 如何在固定区域生成不重叠的圆圈?

performance - OpenGL 平铺渲染 : most efficient way?

c# - Entity Framework + LINQ 缓慢与字符串查询速度?

javascript - 客户端从 C# 压缩字符串解压回字符串

.net - 访问 SQL Server 的 Entity Framework 代码中的访问冲突

c# - OData over Web API - 如何查询嵌套属性?