2012-10-08 189 views
0

我正在开发一个Winform应用程序,使用c#有像我们可以在商场看到的照片亭。C#摄像头在网络摄像头winform

我设法找到方法从网络摄像头捕获图像,并使用easywebcam组件存储捕获的图像。但是,我想在网络摄像头流式视频周围放置一个相框,因此在捕获图像时,相框也会包含在内。

我已经做了几天的研究,但仍然无法得到任何想法。任何古鲁都能为我启发我吗?

回答

0

我已经使用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(); 
+0

嗨Giedrius,感谢您的信息,我之前阅读过AForge.NET,但我对摄像头上的相框没有任何想法。 –

+0

如果我正确理解这个问题,我已经用示例代码更新了我的答案,看起来像是在AForge中看起来如何。 – Giedrius

+0

嗨Giedrius,好吧,我还没有尝试过AForge,但我想在网络摄像头的实况流顶部显示一个相框/模板/背景图像,就像分层。上述框架是这样的:http://www.loonapix.com/framer/ –

0

感谢您的回复,我跟你提到并添加如下覆盖方法_NewFrame事件进行了测试:

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; 
} 

和它的工作就像一个魅力,谢谢版本很多!

+0

just make确保你正在处理所有的事情,图形,位图对象是一次性的,应该处理以避免内存泄漏。 – Giedrius