我在行中收到零星的System.ArgumentException(Details:Invalid Argument)
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(currentBitMap);
以下方法:
protected void imageSnapTimer_Tick(object sender, EventArgs e)
{
...
if (flashFader > 0 && pictureBox.Image != null)
{
lock (LockSyncronize)
{
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(currentBitMap);
Brush brush = new SolidBrush(Color.FromArgb(flashFader, 255, 255, 255));
gr.FillRectangle(brush, 0, 0, currentBitMap.Width, currentBitMap.Height);
gr.Dispose();
}
}
...
pictureBox.Image = currentBitMap;
...
}
imageSnapTimer是VS UIDesigner添加的Timer。其中imageSnapTimer由计时器触发。
imageSnapTimer.Tick += new EventHandler(imageSnapTimer_Tick);
currentBitMap被
创建的方法改变了videoSource.NewFrame += new AForge.Video.NewFrameEventHandler(videoSource_NewFrame);
void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
lock (LockSyncronize)
{
currentBitMap = (Bitmap)eventArgs.Frame.Clone();
}
}
如果我在videoSource_NewFrame中使用相同的同步块imageSnapTimer_Tick,则可以正常工作。
答案 0 :(得分:0)
抱歉我的错。
在我访问currentBitmap之前,我尝试保存图像。
private void saveScreenShot(Bitmap image)
{
image.Save(curPath + "/" + imagesLeft + ".jpg");
image.Dispose();
imagesLeft = imagesLeft + 1;
...
解决方案只是为此方法提供克隆,而不是使用原始方法。
...
saveScreenShot((Bitmap)currentBitMap.Clone());
...