Подтвердить что ты не робот

Веб-камера - просмотр камеры вращается неправильно

Я хочу, чтобы ваша помощь понравилась по проблеме WebCamera. Я использовал библиотеку, доступную от Nuget; WebEye.Controls.Wpf.WebCameraControl(версия 1.0.0). URL-адрес https://www.nuget.org/packages/WebEye.Controls.Wpf.WebCameraControl/

Статья и инструкции доступны по адресу: http://www.codeproject.com/Articles/330177/Yet-another-Web-Camera-control

Из-за ограничений проекта я разработал приложение WPF для планшета Linx (Windows 10), а не как универсальное приложение Windows. Я использовал библиотеку WebEye для подключения к веб-камере на планшете и сфотографироваться с ней. Он отлично работает, когда я держу планшет в ландшафте, но не тогда, когда я держу планшет в портретном режиме. В портретном режиме CameraPreview/VideoWindow автоматически поворачивается на -90 градусов.

Я попытался решить проблему безрезультатно.

  • Поворот элемента управления вокруг видеоокна через свойство Webcamera RenderTransform или LayoutTransform. Элемент управления вращается, но видеоизображение не вращается правильно.
  • Пытался повернуть VideoWindow внутри свойства содержимого WebCamera - я получил исходный код из GitHub и установил VideoWindow для доступа. Скомпилировал библиотеку и использовал ее для поворота VideoWindow с помощью свойства RenderTransform. https://github.com/jacobbo/WebEye/tree/master/WebCameraControl

Независимо от того, что я делаю, предварительный просмотр камеры всегда равен -90 градусов.

Библиотека проста и у нее нет многих свойств для управления видеоокна.

Веб-контроль находится в XAML.

<wpf:WebCameraControl x:Name="webCameraControl" 
                              MouseDoubleClick="webCameraControl_MouseDoubleClick" 
                              StylusButtonUp="webCameraControl_StylusButtonUp" 
                              MouseUp="webCameraControl_MouseUp" 
                              TouchUp="webCameraControl_TouchUp" 
                              GotMouseCapture="webCameraControl_GotMouseCapture" 
                              />

Вот как я инициализировал WebCamera. Когда UserControl будет загружен, он автоматически подключится к веб-камере на планшете. См. Функцию startViewing().

private WebCameraId _cameraID = null;

private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            startViewing();
        }

private void startViewing()
        {
            List<WebCameraId> cams = (List<WebCameraId>)webCameraControl.GetVideoCaptureDevices();

            if (cams.Count > 0)
            {
                _cameraID = (WebCameraId)cams[0];

                webCameraControl.StartCapture(_cameraID);
            }
        }

Я попытался заставить элемент управления правильно его вращать, когда приложение обнаруживает изменение на экране дисплея. См. Событие DisplaySettingsChanged.

public ucWebCam()
{
    InitializeComponent();

    Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
}

private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
    try
    {
        double angle = 0;

        if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
        {
            angle = 0;
        }
        else
        {
            angle = -90;
        }

        webCameraControl.StopCapture();

        adjustWebcamAngle(angle);

        webCameraControl.StartCapture(_cameraID);

    }
    catch (Exception ex)
    {

    }
}

private void adjustWebcamAngle(double angle)
{

    try
    {
        // IGNORE portrait boolean flag
        bool portrait = false; 

        if (angle == 90 || angle == 180)
        {
            portrait = true;
        }

        // TRIED TO SET THE ANGLE OF THE CONTROL TO NO AVAIL
        RotateTransform rotTransform = new RotateTransform(angle);
        //rotTransform.Angle = angle;

        ScaleTransform scaleTransform = new ScaleTransform();
        //scaleTransform.ScaleX = (portrait) ? 0 : 1;
        //scaleTransform.ScaleY = (portrait) ? 0 : 1;

        TransformGroup tGroup = new TransformGroup();                
        //tGroup.Children.Add(scaleTransform);
        tGroup.Children.Add(rotTransform);

        // ROTATE CAMERA!
        webCameraControl.RenderTransform = tGroup;

    } catch (Exception ex)
    {

    }
}

Пока я только повернул элемент управления WebCam, а не видеоизображение.

Я просмотрел комментарии в статье Александра без радости: http://www.codeproject.com/Articles/330177/Yet-another-Web-Camera-control

Как правильно повернуть предварительный просмотр камеры? Не могли бы вы посоветовать, где я ошибаюсь?

Я приложил два изображения, чтобы проиллюстрировать мою проблему.

LandScape

Портрет

4b9b3361

Ответ 1

Если вы не являетесь незнакомцем С#, я бы рекомендовал вам использовать EMGUCV nuget и создать собственное приложение для предварительного просмотра. Это не так сложно, и вы можете использовать MVVM для привязки фреймов к вашему представлению, что делает его лучше, чем использование кода, находящегося за вашим контролем.

PS: Это не ответ, но это решение вашей проблемы. Я еще не могу оставлять комментарии, так как у меня нет 50 баллов: (

Хороший день.