Я бы хотел, чтобы ваша помощь понравилась по проблеме 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 градусов.
Я пробовал решить проблему безрезультатно.
- Поверните элемент управления, окружающий видеоокно, через свойство Web-камеры 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
Как я могу повернуть предварительный просмотр камеры правильно? Не могли бы вы посоветовать, где я ошибаюсь?
Я приложил два изображения, чтобы проиллюстрировать мою проблему.
Поскольку эта библиотека кажется, основана на DIrecthShow, я хотел бы предложить вам прочитать [этот ответ] (HTTP : //stackoverflow.com/a/30196905/2846483). Короче говоря: нет простого способа сделать это. Вам либо нужно написать свой собственный механизм предварительного просмотра, либо создать собственный фильтр DirectShow, который сделает трюк и чтобы добавить его в граф захвата. – dymanoid