Ich verwende derzeit AForge DLL, um das Video auf der Bildbox für die Live-Ansicht zu rendern. Ich habe eine Video-Frame-Funktion, ob WriteFrame oder Screenshot den aktuellen Picture-Box-Rahmen als JPG.System.Drawing-Parameter ist nicht gültig
Aber ich traf ein Problem, wenn das Programm irgendwann einen Fehler von Parameter ist nicht gültig oder Objekt wurde an anderer Stelle verwendet. Ich habe versucht, eine Lösung zu finden, um es zu lösen, und ich bin ziemlich sicher, dass ich über das Image und das Klon-Image verfügte, aber das Problem besteht immer noch.
Können Sie mir helfen, was ich mit meinem Programm falsch gemacht habe?
void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
//your code using bmp object
if (D1Pic.BackColor == Color.Green)
{
video = (Bitmap)eventArgs.Frame.Clone();
if (livePreview.Image != null)
{
//Dispose the resources
this.Invoke(new MethodInvoker(delegate() { livePreview.Image.Dispose(); }));
}
livePreview.Image = (Bitmap)eventArgs.Frame.Clone();
imgclone = (Image)livePreview.Image.Clone();
FileWriter.WriteVideoFrame(video);
}
else
{
video = (Bitmap)eventArgs.Frame.Clone();
if (livePreview.Image != null)
{
//Dispose the resources
this.Invoke(new MethodInvoker(delegate() { livePreview.Image.Dispose(); }));
this.Invoke(new MethodInvoker(delegate() { video.Dispose(); }));
}
livePreview.Image = (Bitmap)eventArgs.Frame.Clone();
imgclone = (Image)livePreview.Image.Clone();
}
video.Dispose();
livePreview.Refresh();
Hier sind die Stack-Trace-Fehler:
{"Parameter is not valid."}
at System.Drawing.Image.get_Width()
at System.Windows.Forms.PictureBox.ImageRectangleFromSizeMode(PictureBoxSizeMode mode)
at System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
AKTUALISIERT Code:
var newFrame = (Bitmap)eventArgs.Frame.Clone();
this.Invoke(new MethodInvoker(delegate()
{
if (livePreview.Image != null)
{
livePreview.Image.Dispose();
}
livePreview.Image = newFrame;
}));
imgclone = (Bitmap)eventArgs.Frame.Clone();
//Write frame into video
if (D1Pic.BackColor == Color.Green)
{
video = (Bitmap)eventArgs.Frame.Clone();
FileWriter.WriteVideoFrame(video);
}
In welcher Zeile tritt der Fehler auf? –
@JeremyThompson livePreview.Refresh() – Marcus
Versuchen Sie 'livePreview.Invalidate()' stattdessen. –