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