【发布时间】:2012-10-08 08:38:47
【问题描述】:
我正在使用c# 开发一个 Winform 应用程序,以拥有我们可以在购物中心看到的照片亭之类的东西。
我设法找到了从网络摄像头捕获图像并使用 easywebcam 组件存储捕获的图像的方法。但是,我想在网络摄像头流媒体视频周围有一个相框,因此当捕获图像时,相框也包括在内。
我已经研究了好几天,但仍然对此一无所知。有哪位大师可以启发我吗?
【问题讨论】:
我正在使用c# 开发一个 Winform 应用程序,以拥有我们可以在购物中心看到的照片亭之类的东西。
我设法找到了从网络摄像头捕获图像并使用 easywebcam 组件存储捕获的图像的方法。但是,我想在网络摄像头流媒体视频周围有一个相框,因此当捕获图像时,相框也包括在内。
我已经研究了好几天,但仍然对此一无所知。有哪位大师可以启发我吗?
【问题讨论】:
我使用 AForge 库来处理来自 C# 的网络摄像头,我喜欢它的 API 是多么干净。 这里的示例如何为视频添加时间戳、拍摄快照等: http://www.aforgenet.com/framework/samples/video.html
如果我理解正确的话,你在拍摄快照时需要有原始框架,所以你在框架上绘画之前复制它:
Image lastUneditedFrame;
private void VideoSourcePlayer_NewFrame(object sender, ref Bitmap image)
{
if (lastUneditedFrame != null)
{
lastUneditedFrame.Dispose();
}
lastUneditedFrame = image.Clone(new Rectangle(0, 0, image.Width, image.Height), image.PixelFormat);
var graphics = Graphics.FromImage(image);
// do the drawing of photo frame
graphics.Dispose();
}
// on snapshot button click, simply call lastUneditedFrame.Save();
【讨论】:
感谢您的回复,我用您提到的_NewFrame事件进行了测试,并在overlay方法中添加如下:
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap img = (Bitmap)eventArgs.Frame.Clone();
// Perform Overlay here
Graphics camImg = Graphics.FromImage(img);
Bitmap frame = new Bitmap(@"D:\PriusC1.png");
camImg.DrawImage(frame, new Point(100, 100));
camImg.Save();
pictureBox1.Image = img;
}
它就像一个魅力,非常感谢你!
【讨论】: