我正在使用kinect 360和windows sdk 1.8。我有一個用c#wpf開發的應用程序,可以用手勢移動鼠標光標,並且還可以點擊。 問題是,只要我想將光標移動到角落,我需要在kinect前面走一步才能做到這一點。 但我想以這種方式縮放光標,所以我只需要移動我的手和光標移動到所有屏幕。如何使用kinect將光標移動到屏幕角落?
這裏是我想
void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
bool receivedData = false;
using (SkeletonFrame SFrame = e.OpenSkeletonFrame())
{
if (SFrame == null)
{
return;
}
else
{
skeletons = new Skeleton[SFrame.SkeletonArrayLength];
SFrame.CopySkeletonDataTo(skeletons);
receivedData = true;
}
}
if (receivedData)
{
Skeleton currentSkeleton = (from s in skeletons
where s.TrackingState == SkeletonTrackingState.Tracked
select s).FirstOrDefault();
if (currentSkeleton != null)
{
processing(currentSkeleton.Joints[JointType.HandRight]);
click(currentSkeleton.Joints[JointType.HandLeft], currentSkeleton.Joints[JointType.Head]);
}
}
}
private void processing(Joint handright)
{
Microsoft.Kinect.SkeletonPoint vector = new Microsoft.Kinect.SkeletonPoint();
vector.X = ScaleVector(1600, handright.Position.X);
vector.Y = ScaleVector(900, -handright.Position.Y);
vector.Z = handright.Position.Z;
handright.Position = vector;
zAxis = handright.Position.Z;
leftofscreen = Convert.ToInt32(handright.Position.X);
topofscreen = Convert.ToInt32(handright.Position.Y);
SetCursorPos(leftofscreen, topofscreen);
}
private void click(Joint handleft, Joint head)
{
if (handleft.Position.Y > head.Position.Y)
{
mouse_event(LEFTDOWN, leftofscreen, topofscreen, 0, 0);
mouse_event(LEFTUP, leftofscreen, topofscreen, 0, 0);
}
}
private float ScaleVector(int length, float position)
{
float value = (((((float)length)/1f)/2f) * position) + (length/2);
if (value > length)
{
return (float)length;
}
if (value < 0f)
{
return 0f;
}
return value;
}
的代碼,我自己正在使用SDK 1.0在本教程中嘗試這個kinect for c# dev和similar to youtube video code但由於有些方法是絕對的,所以我無法跟蹤我的手 能有人幫助我如何正確地用光標縮放我的手部動作,這樣我就可以將光標移動到所有屏幕上,並且手部有輕微的移動?
你能使用kinect sdk v2嗎?如果可以的話,問題將得到解決。否則我可以嘗試解決您的問題 – bingcheng45
@ bingcheng45我沒有試過sdk v2。你可以建議我一個鏈接或文章,我可以找到如何做與我在代碼與sdk v2相同的東西,但如果你可以幫助我與我的當前代碼,這將是非常好的你。先謝謝你。 –
我真的找不到這篇文章,但我可以讓我的代碼只有懸停和一些默認手勢在github上運行,供您查看和嘗試。如果你發現有用的確給我一個upvote XP – bingcheng45