C# 如何使用ViewModel在Kinect交互示例中传递骨骼数据
我正在玩一点最新的SDK(1.7),并希望在其中一个示例中进行一些更改 我有一个名为的项目,我希望有来自骨骼,深度或彩色图像的数据,但我无法弄清楚如何在view和viewmodel之间传递这些数据。举个例子,我想用这个画一个骨架。或者如何使用相同的项目体系结构显示深度或颜色数据 如何以适当的方式做这件事?你对我有什么建议吗 我已经更新了我的HomeView和ViewModel,但我在这里得到了一个NullReferenceException:C# 如何使用ViewModel在Kinect交互示例中传递骨骼数据,c#,wpf,xaml,kinect,kinect-sdk,C#,Wpf,Xaml,Kinect,Kinect Sdk,我正在玩一点最新的SDK(1.7),并希望在其中一个示例中进行一些更改 我有一个名为的项目,我希望有来自骨骼,深度或彩色图像的数据,但我无法弄清楚如何在view和viewmodel之间传递这些数据。举个例子,我想用这个画一个骨架。或者如何使用相同的项目体系结构显示深度或颜色数据 如何以适当的方式做这件事?你对我有什么建议吗 我已经更新了我的HomeView和ViewModel,但我在这里得到了一个NullReferenceException: 'this.RGBImage.DisplayImag
'this.RGBImage.DisplayImage.Source =
BitmapSource.Create(colorFrame.Width,
colorFrame.Height,
96,
96,
PixelFormats.Bgr32,
null,
pixels,
stride);'
首先,请确保您的对象
RGBImage
及其属性DisplayImage
不为null
。我使用WriteableBitmap来显示我的RGB值,因为它创建了一个WriteableBitmap对象并将像素重写到该对象中,因此性能更好。您可以在WriteableBitmap上找到更多信息
你可以这样使用它-
WriteableBitmap wBitmap = new WriteableBitmap(colorFrame.Width,
colorFrame.Height,
// Standard DPI
96, 96,
// Current format for the ColorImageFormat
PixelFormats.Bgr32,
// BitmapPalette
null);
通过执行以下操作将新像素写入对象-
wBitmap.WritePixels(
// Represents the size of our image
new Int32Rect(0, 0, colorFrame.Width, colorFrame.Height),
// Our image data
_pixelData,
// How much bytes are there in a single row?
colorFrame.Width * colorFrame.BytesPerPixel,
// Offset for the buffer, where does he need to start
0);
将其分配给图像控件-
this.RGBImage.DisplayImage.Source = wBitmap;
骨架数据
您可以执行与颜色数据完全相同的骨骼跟踪,您可以启用流,处理在SkeletonFrameReady
中传入的数据,并将所有数据保存在ViewModel
的属性中。
通过这样做,它使您能够对这些属性进行数据绑定。首先确保您的对象
RGBImage
及其属性DisplayImage
不为null
。我使用WriteableBitmap来显示我的RGB值,因为它创建了一个WriteableBitmap对象并将像素重写到该对象中,以提高性能更好。您可以在WriteableBitmap上找到更多信息
你可以这样使用它-
WriteableBitmap wBitmap = new WriteableBitmap(colorFrame.Width,
colorFrame.Height,
// Standard DPI
96, 96,
// Current format for the ColorImageFormat
PixelFormats.Bgr32,
// BitmapPalette
null);
通过执行以下操作将新像素写入对象-
wBitmap.WritePixels(
// Represents the size of our image
new Int32Rect(0, 0, colorFrame.Width, colorFrame.Height),
// Our image data
_pixelData,
// How much bytes are there in a single row?
colorFrame.Width * colorFrame.BytesPerPixel,
// Offset for the buffer, where does he need to start
0);
将其分配给图像控件-
this.RGBImage.DisplayImage.Source = wBitmap;
骨架数据
您可以执行与颜色数据完全相同的骨骼跟踪,您可以启用流,处理在SkeletonFrameReady
中传入的数据,并将所有数据保存在ViewModel
的属性中。
通过这样做,您可以对这些属性进行数据绑定。您是否检查了空值?你把代码放在哪个文件中了?这段代码来自HomeScreenViewModel.cs,看起来BitmapSource没有提供任何数据。我只是简单地浏览了一下,但没有看到DataContect集。我是否错过了它,或者这不是没有设置?@EvilClosetMonkey我已将其添加到我的HomeScreenView.cs中,但现在的问题是如何将Kinect传感器对象从KinectController.cs传递到HomeScreenView.cs?您可以通过构造函数传递它,或者订阅事件。我的答案可能是你的意思。我不确定您的应用程序结构,但考虑到
KinectController
名称,这意味着所有Kinect操作都应该在那里处理。可以触发其他ViewModels拾取的事件,或者ViewModels中的公共回调可以订阅Kinect事件。是否检查了空值?你把代码放在哪个文件中了?这段代码来自HomeScreenViewModel.cs,看起来BitmapSource没有提供任何数据。我只是简单地浏览了一下,但没有看到DataContect集。我是否错过了它,或者这不是没有设置?@EvilClosetMonkey我已将其添加到我的HomeScreenView.cs中,但现在的问题是如何将Kinect传感器对象从KinectController.cs传递到HomeScreenView.cs?您可以通过构造函数传递它,或者订阅事件。我的答案可能是你的意思。我不确定您的应用程序结构,但考虑到KinectController
名称,这意味着所有Kinect操作都应该在那里处理。可以触发其他ViewModels拾取的事件,或者ViewModels中的公共回调可以订阅Kinect事件。现在我甚至可以在VisualStudio或Blend中看到来自RGB摄像头的数据,当我打开但出现此错误时Kinect已在另一个进程中使用。
因此我认为“Kinect传感器”对象应以不同的方式传递或使用,但如何使用?现在我可以在VisualStudio或混合中看到来自RGB摄像头的数据,当我打开但出现此错误时,Kinect已经在另一个进程中使用。
所以我认为“Kinect传感器”对象应该以不同的方式传递或使用,但如何使用?