C# 刷新图像更改的最佳方法

C# 刷新图像更改的最佳方法,c#,image,C#,Image,我有一个winform c#应用程序 我使用Emgu比较两幅图像之间的运动差异 我将检测到的更改施加到第一个图像上,以便第一个图像现在看起来与第二个图像相同 我正在覆盖用户控件的onpaint事件以绘制图像。我必须使usercontrol无效以强制onpaint事件 这很有效,但内存仍然有点“尖峰”。是否有一种方法可以仅使已更改的像素无效(例如,像区域) 这是我当前的代码: protected override void OnPaint(PaintEventArgs pe) {

我有一个winform c#应用程序

我使用Emgu比较两幅图像之间的运动差异

我将检测到的更改施加到第一个图像上,以便第一个图像现在看起来与第二个图像相同

我正在覆盖用户控件的onpaint事件以绘制图像。我必须使usercontrol无效以强制onpaint事件

这很有效,但内存仍然有点“尖峰”。是否有一种方法可以仅使已更改的像素无效(例如,像区域)

这是我当前的代码:

    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()
方法。