我需要在Kinect中制作光标,但我不知道从哪里开始。我需要使用WPF和C#来实现它。光标应该是手的形状,当我将鼠标悬停在元素上时,应该出现“加载”圆圈,当它“加载”时,它应该触发悬停元素上的点击事件。 我相信你们都熟悉这一点。
如果有人能给我一些指示,那将会有很大的帮助哦如何实现这一目标。
答案 0 :(得分:3)
以下是可能对您有所帮助的代码段:
using Microsoft.Research.Kinect.Nui;
Runtime nui = Runtime.Kinects[0];
nui.Initialize(RuntimeOptions.UseSkeletalTracking);
nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
SkeletonFrame sf = e.SkeletonFrame;
SkeletonData d = (from s in sf.Skeletons
where s.TrackingState == SkeletonTrackingState.Tracked
select s).FirstOrDefault();
if (d != null)
{
SetHandPosition(imageCursor, d.Joints[JointID.HandLeft]);
}
}
void SetHandPosition(FrameworkElement e, Joint joint)
{
Joint scaledJoint = Coding4Fun.Kinect.Wpf.SkeletalExtensions.ScaleTo(joint, 600, 400, 0.75f, 0.75f);
Canvas.SetLeft(e, scaledJoint.Position.X);
Canvas.SetTop(e, scaledJoint.Position.Y);
}
如果希望光标悬停在元素上,则只需转到元素属性并为该元素设置光标。在Visual Studio中,您可以在元素属性中选择一个游标。
要点击悬停在元素上,您必须实现MouseEnter事件
private void button1_MouseEnter(object sender, MouseEventArgs e)
{
....
}
以下是一些关于它的信息:
答案 1 :(得分:1)
这是使用官方SDK的一个很好的解决方案,但即使你不是,它可以非常(!)有用(这对我来说):
您应该查看此处提供的{免费)代码Beginning Kinect Programming with the Microsoft Kinect SDK sample code,您点击了&#34;源代码/下载&#34;以及第6章(文件夹名称)中您将对此感兴趣的是什么。
基本上他们使用的静态类KinectInput
允许引发像KinectCursorEnterEvent
这样的新事件,有一个游标管理器KinectCursorManager
几乎所有东西都可以获得手的位置/更新光标......然后他们使用一个装饰器来放置光标,并将你想要的FrameworkElement
作为光标。
他们实施您正在谈论的HoverButton
。它会在计时器结束后触发click事件(在KinectCursorEnterEvent
发生时启动计时器)。他们提出的解决方案很优雅,并且可以轻松实现好的控件。
您可以轻松修改代码来处理两个光标(这是Kinect的增值,不是吗?)
拥有枚举CursorSide
:
public enum CursorSide
{
Left,
Right
}
并仅修改具有容量字典2的KinectCursorManager
,并且枚举为Key,并且在每个指针的光标下的elemtn上有一个指针:
private Dictionary<CursorSide, CursorAdorner> _cursorAdorner;
private UIElement _lastElementOverRightHand;
private UIElement _lastElementOverLeftHand;
但在你必须删除选择primaryHand的代码部分之前(基本上是最接近Kinect的手)。
我希望这可以帮助某人: - ]
这本书非常有趣,你可以买几块钱。