C# 刷新图像更改的最佳方法
我有一个winform c#应用程序 我使用Emgu比较两幅图像之间的运动差异 我将检测到的更改施加到第一个图像上,以便第一个图像现在看起来与第二个图像相同 我正在覆盖用户控件的onpaint事件以绘制图像。我必须使usercontrol无效以强制onpaint事件 这很有效,但内存仍然有点“尖峰”。是否有一种方法可以仅使已更改的像素无效(例如,像区域) 这是我当前的代码:C# 刷新图像更改的最佳方法,c#,image,C#,Image,我有一个winform c#应用程序 我使用Emgu比较两幅图像之间的运动差异 我将检测到的更改施加到第一个图像上,以便第一个图像现在看起来与第二个图像相同 我正在覆盖用户控件的onpaint事件以绘制图像。我必须使usercontrol无效以强制onpaint事件 这很有效,但内存仍然有点“尖峰”。是否有一种方法可以仅使已更改的像素无效(例如,像区域) 这是我当前的代码: protected override void OnPaint(PaintEventArgs pe) {
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
if (CurrentFrame != null)
{
pe.Graphics.DrawImageUnscaled(CurrentFrame, 0, 0);
}
}
CurrentFrame是一个静态位图
谢谢您是否尝试使用更新的值重新创建同一控件?您好,感谢您抽出时间来帮助我。我编辑了我的帖子以显示代码。就这么简单。为什么销毁和重新创建控件会更快?准备学习:)thanksI这样回答,因为破坏控制可能会释放一些内存,而重新创建控制会占用几乎相同的内存,因此不会出现内存尖峰问题。这就是我的理解告诉我的。于是回答accordingly@AndrewSimpson是的,有一种方法可以仅使某些区域无效,但是您必须自己确定该区域,您可以计算该
区域
,并传入无效
方法。@AndrewImpson您可以使用区域.Union
方法将许多区域添加到另一个区域,将所有区域合并为一个区域后,您可以将最后一个区域传递给Invalidate()
方法。