使用AForge

时间:2018-04-22 03:02:35

标签: c# winforms aforge

我正在使用AForge类库。

我从这个图书馆使用VideoSourcePlayer为网络摄像头拍照。

我的目的是创建一个功能,允许用户拍摄图像,将其建立为公司徽标。 您不仅可以从计算机中选择图像,还可以通过相机从外部捕获图像,因为您可能只想将物理支持(纸张)的徽标传输到程序中。

如之前在SO(how to pause a video file played using videosourceplayer)中所述,VideoSourcePlayer没有Pause方法或任何允许冻结图像的功能。

是的,它确实具有GetCurrentFrame()方法,但只从当前帧中获得Bitmap,必须传递给PictureBox

但我希望当用户点击按钮Capture时,VideoSourcePlayer模拟图像被冻结,当用户按下Delete按钮时,因为他不喜欢这张照片,然后图像停止冻结并恢复其运动。

逻辑就像暂停或播放视频一样。

嗯,没有方法,所以我决定寻找另一种方法来获得这个,并且...

如果拍摄了照片,请使用包含最后一帧的PictureBoxVideoSourcePlayer显示在PictureBox上,如果已删除,则VideoSourcePlayer将被移除, private readonly Bitmap EmptyBitmap; private void CaptureBtn_Click(object sender, EventArgs e) { Bitmap bitmap = this.VideoSource.GetCurrentVideoFrame(); ShowTakedFrame(bitmap, false); } private void ShowTakedFrame(Bitmap Frame, bool remove) { var picture = new System.Windows.Forms.PictureBox(); picture.Size = this.VideoSource.Size; picture.Location = this.VideoSource.Location; if (!remove) { this.VideoSource.Stop(); picture.Image = Frame; this.Controls.Remove(VideoSource); this.Controls.Add(picture); } else { this.Controls.Remove(picture); this.Controls.Add(VideoSource); this.VideoSource.VideoSource = this.CaptureDevice; this.VideoSource.Start(); } } private void DeleteBtn_Click(object sender, EventArgs e) { ShowTakedFrame(EmptyBitmap, true); } 随视频一起返回。

Capture

我的问题是,在拍摄照片时,图像是按下Delete按钮后的几秒钟,当您删除拍摄的图像时,使用VideoSourcePlayer按钮,视频value_from_datadict被冻结了。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

问题在于,当您删除PictureBox并添加VideoSourcePlayer时,它会创建一个新对象,即不具有前一个对象属性的对象。我的建议是你以不同的形式创建捕获。