Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ViewModel在Kinect交互示例中传递骨骼数据_C#_Wpf_Xaml_Kinect_Kinect Sdk - Fatal编程技术网

C# 如何使用ViewModel在Kinect交互示例中传递骨骼数据

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

我正在玩一点最新的SDK(1.7),并希望在其中一个示例中进行一些更改

我有一个名为的项目,我希望有来自骨骼,深度或彩色图像的数据,但我无法弄清楚如何在view和viewmodel之间传递这些数据。举个例子,我想用这个画一个骨架。或者如何使用相同的项目体系结构显示深度或颜色数据

如何以适当的方式做这件事?你对我有什么建议吗

我已经更新了我的HomeView和ViewModel,但我在这里得到了一个NullReferenceException:

'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传感器”对象应该以不同的方式传递或使用,但如何使用?