2012-10-08 246 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