private void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
if (!requestedToStop)
{
Bitmap newFrame = (Bitmap)eventArgs.Frame.Clone();
// let user process the frame first
if (NewFrame != null)
{
NewFrame(this, ref newFrame);
}
// now update current frame of the control
lock (sync)
{
// dispose previous frame
if (currentFrame != null)
{
if (currentFrame.Size != eventArgs.Frame.Size)
{
needSizeUpdate = true;
}
currentFrame.Dispose();
currentFrame = null;
}
if (convertedFrame != null)
{
convertedFrame.Dispose();
convertedFrame = null;
}
currentFrame = newFrame;
frameSize = currentFrame.Size;
lastMessage = null;
// check if conversion is required to lower bpp rate
if ((currentFrame.PixelFormat == PixelFormat.Format16bppGrayScale) ||
(currentFrame.PixelFormat == PixelFormat.Format48bppRgb) ||
(currentFrame.PixelFormat == PixelFormat.Format64bppArgb))
{
convertedFrame = Accord.Imaging.Image.Convert16bppTo8bpp(currentFrame);
}
}
// update control
Invalidate();
}
}