相机预览旋转方式错误
我想请你帮忙解决WebCamera问题。 我使用了Nuget提供的一个库; WebEye.Controls.Wpf.WebCameraControl(版本1.0.0)。 该网址是https://www.nuget.org/packages/WebEye.Controls.Wpf.WebCameraControl/
该文章和说明可在以下网址找到:http://www.codeproject.com/Articles/330177/Yet-another-Web-Camera-control
由于项目限制,我为Linx平板电脑(Windows 10)开发了WPF应用程序,而不是通用Windows应用程序。 我使用WebEye库连接到平板电脑上的网络摄像头并用它拍照。 当我在平板电脑中放置平板电脑时,它可以正常工作,但在以纵向模式放置平板电脑时不会。 在纵向模式下,CameraPreview / VideoWindow自动旋转-90度。
我试图解决问题无济于事。
无论我做什么,相机预览始终是-90度。
该库很简单,它没有很多属性来操作视频窗口。
Web控件位于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
我如何正确旋转相机预览? 你能告诉我哪里出错了吗?
我附上了两张图片来说明我的问题。
如果您对C#不是陌生人,我会建议您使用EMGUCV nuget并创建您自己的预览应用程序。 这并不困难,您可以使用MVVM将框架绑定到您的视图,使其比使用控件背后的代码更好。
PS:这不是一个答案,但它是解决您的问题的方法。 我不能发表评论,因为我没有50分:(
祝你今天愉快。
链接地址: http://www.djcxy.com/p/81045.html上一篇: Camera Preview rotates wrong way
下一篇: Capturing Webcam Image without preview view or cameraUI?