私は最近、非常にシンプルであることを発見してからAForge.NETを試したかったので、Video.FFMPEG名前空間を使って単純なビデオ再生を行うことにしました。 。それだけではうまくいきますが、重要でない後にすべてのイメージを処分したかったのは、明白な理由がないのに約1.5GBのメモリが必要だったからです。それが私の問題が始まったところです。なんらかの理由で、この例外をスローすることがあります(通常はウィンドウのサイズを変更するとき)。私は本当にそれが原因で起こり得るかどうかはわかりません。たぶんそれは本当にばかげた過ちです。私の推測では、それはタイマーによって引き起こされる可能性があるが、私は完全に異なる間違いを犯した可能性があり、それを見ることはできない。これは私が取得しておく例外です:picturebox image dispose exception
************** Exception Text **************
System.ArgumentException: Parameter is not valid.
at System.Drawing.Image.get_Width()
at System.Drawing.Image.get_Size()
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.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
これはコードです(私はパブリック変数が良くないことを認識し、私はもちろん、テストしていない):
public long i = 0;
public Bitmap img;
public VideoFileReader reader;
public System.Timers.Timer aTimer;
public void render(object source, ElapsedEventArgs e)
{
if (img != null) img.Dispose();
if (i < reader.FrameCount)
{
img = reader.ReadVideoFrame();
pictureBox1.Image = img;
}
i++;
}
private void button1_Click(object sender, EventArgs e)
{
reader = new VideoFileReader();
aTimer = new System.Timers.Timer();
reader.Open("d:\\result.avi");
aTimer.Elapsed += new ElapsedEventHandler(render);
aTimer.Interval = reader.FrameRate;
aTimer.Enabled = true;
}