2011-10-24 55 views
0

我正在製作將在內置兩個攝像頭的平板設備上運行的應用程序。其中一個要求是能夠捕獲圖像並將其保存。使用表達式編碼的WPF攝像頭捕獲

到目前爲止,我已經使用這個代碼

Dim Job As New LiveJob 
Dim source As LiveDeviceSource 
source = Job.AddDeviceSource(EncoderDevices.FindDevices(EncoderDeviceType.Video).Item(0), Nothing) 

source.PreviewWindow = New PreviewWindow(New HandleRef(Me.panPreview, Me.panPreview.Handle)) 

Job.ActivateSource(source) 

這將顯示在託管的WinForms面板預覽之所以能獲得網絡攝像頭的輸出預覽。問題是我如何從這個流中捕獲一個圖像並返回一個新的圖像對象供以後處理?

我已經嘗試使用RenderTargetBitmap捕獲winforms主機,但只是返回一個黑色的矩形,它不會讓我呈現winforms面板。

回答

0

剛剛在代碼項目中找到了這塊寶石。代碼在這裏。這裏panelVideoPreview是你的預覽,即panPreview窗口。希望這可以幫助。

private void cmdGrabImage_Click(object sender, EventArgs e)   
{ 
// Create a Bitmap of the same dimension of panelVideoPreview (Width x Height) 
    using (Bitmap bitmap = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height)) 
    { 
     using (Graphics g = Graphics.FromImage(bitmap)) 
     { 
      // Get the paramters to call g.CopyFromScreen and get the image 
      Rectangle rectanglePanelVideoPreview = panelVideoPreview.Bounds; 
      Point sourcePoints = panelVideoPreview.PointToScreen(new Point(panelVideoPreview.ClientRectangle.X, panelVideoPreview.ClientRectangle.Y)); 
      g.CopyFromScreen(sourcePoints, Point.Empty, rectanglePanelVideoPreview.Size); 
     } 
     string strGrabFileName = String.Format("C:\\Snapshot_{0:yyyyMMdd_hhmmss}.jpg", DateTime.Now); 
     toolStripStatusLabel1.Text = strGrabFileName; 
     bitmap.Save(strGrabFileName, System.Drawing.Imaging.ImageFormat.Jpeg);     
    } 
} 
0

如果你有超過你想捕捉的捕捉將是在窗口的圖像,或者如果你最小化的車窗同一窗口中的窗口,你會捕捉coordenates的屏幕截圖。這種方法是用coordenates捕獲屏幕。

這將是怎樣的流媒體的捕獲圖像?