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

#wpf #expression-encoder

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

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

Ответ №1:

Только что нашел этот фрагмент драгоценного камня в code project. Далее идет код. Здесь panelVideoPreview — это ваш предварительный просмотр, то есть окно панорамирования. надеюсь, это поможет.

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

Ответ №2:

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

Как это будет изображение захвата потоковой передачи?