我正在使用AForge
类库。
我从这个图书馆使用VideoSourcePlayer
为网络摄像头拍照。
我的目的是创建一个功能,允许用户拍摄图像,将其建立为公司徽标。 您不仅可以从计算机中选择图像,还可以通过相机从外部捕获图像,因为您可能只想将物理支持(纸张)的徽标传输到程序中。
如之前在SO(how to pause a video file played using videosourceplayer)中所述,VideoSourcePlayer
没有Pause
方法或任何允许冻结图像的功能。
是的,它确实具有GetCurrentFrame()
方法,但只从当前帧中获得Bitmap
,必须传递给PictureBox
。
但我希望当用户点击按钮Capture
时,VideoSourcePlayer
模拟图像被冻结,当用户按下Delete
按钮时,因为他不喜欢这张照片,然后图像停止冻结并恢复其运动。
逻辑就像暂停或播放视频一样。
嗯,没有方法,所以我决定寻找另一种方法来获得这个,并且...
如果拍摄了照片,请使用包含最后一帧的PictureBox
,VideoSourcePlayer
显示在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
被冻结了。
有人可以帮我这个吗?
答案 0 :(得分:0)
问题在于,当您删除PictureBox
并添加VideoSourcePlayer
时,它会创建一个新对象,即不具有前一个对象属性的对象。我的建议是你以不同的形式创建捕获。