Захват веб-камеры WPF с использованием выражения кодирования - PullRequest
0 голосов
/ 24 октября 2011

Я создаю приложение, которое будет работать на планшетном устройстве с двумя встроенными веб-камерами. Одним из требований является возможность захвата изображений и их сохранения.

Пока мне удалось получить предварительный просмотр выходных данных веб-камеры, используя этот код

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. Вопрос в том, как мне захватить изображение из этого потока и вернуть новый объект изображения для дальнейшей обработки?

Я попытался захватить хост winforms с помощью RenderTargetBitmap, но просто возвращает черный прямоугольник, и он не позволяет мне отображать панель winforms.

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

Если у вас есть окно над окном, которое вы хотите захватить, это будет изображение над окном, или если вы свернете окно, то вы получите снимок экрана с координатами. Этот метод - захват экрана с координатами.

Как бы это было изображение захвата потокового?

0 голосов
/ 25 октября 2011

Только что нашел этот драгоценный камень в коде проекта.Здесь идет код.Здесь 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);                
    }
}
...