我有一个WinForm C#应用程序。它会在UserControl
事件的onpaint
上显示尺寸为720x360像素的图片。
我不断地将当前图像与每1/10秒的新图像进行比较。
我一直在使用Validate()
强制onpaint
事件重绘新图片。
我决定做的是Invalidate
并传递区域。
因此,我将当前图像与新图像进行比较。寻找差异。创建一个新的矩形对象,然后使用Union
方法添加新图像。
这是我的代码:
//我使用EMGU比较2张图片。
Image<Bgr, byte> _diffBetweenCurrentAndPrevious = newImage.AbsDiff(currentFrame);
//我通过结果图像枚举列出超出阈值的差异。
for (int y = 0; y < 576; y++)
{
for (int x = 0; x < 720; x++)
{
//if beyond a threshold then note it
motionRegions.Union(new Rectangle(x, y, 1, 1));
}
}
我分配了新图片:
newImage =(Bitmap) currentFrame.Clone();
然后我打电话给:
Invalidate(motionRegions);
这将称之为:
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
if (newImage != null)
{
pe.Graphics.DrawImageUnscaled(newImage, 0, 0);
}
}
问题是当重新绘制我需要重绘的内容时,我似乎没有改善响应时间/ RAM。
我做错了吗?
由于