私は Kinect と VS 開発に不慣れで、Windows Kinect クイックスタート シリーズを使用していましたが、残念ながら Kinect SDK v1.00 用でした。
KinectColorView の使用法に行き詰まってしまい、先に進めません (2 日間ググってみました)。この非常によく似た質問も見つかりました: Using KinectColorViewer in SDK1.5 here on StackOverflow ですが、私の問題を解決できませんでした。近くにいることは知っていますが、助けが必要です。
問題は、KinectColorViewer を動作させることができないことです。
XAML デザイナーに追加しましたが、SensorManager にバインドできないようです。ここに私のXAMLコードがあります:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfViewers="clr-namespace:Microsoft.Samples.Kinect.WpfViewers;assembly=Microsoft.Samples.Kinect.WpfViewers" xmlns:Toolkit="clr-namespace:Microsoft.Kinect.Toolkit;assembly=Microsoft.Kinect.Toolkit" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="KinectSetupDev.MainWindow"
Title="MainWindow" Height="768" Width="1024" Loaded="Window_Loaded_1" Closed="Window_Closed_1">
<Grid HorizontalAlignment="Left" Height="736" VerticalAlignment="Top" Width="1012" Margin="2,2,0,0">
<TextBlock x:Name="tbMessages" HorizontalAlignment="Left" Height="60" Margin="10,662,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="992"/>
<WpfViewers:KinectColorViewer x:Name="KinectColorViewer" KinectSensorManager="{Binding KinectSensorManager}" HorizontalAlignment="Left" Height="240" Margin="608,27,0,0" VerticalAlignment="Top" Width="320" BorderThickness="1" BorderBrush="Black"/>
</Grid>
</Window>
チャンクを追加する必要があったことを除いて、XAML コードについて報告することは何もありません
"KinectSensorManager="{Binding KinectSensorManager}"
XAML デザイナーの GUI でこれを行う方法を見つけることができなかったので、KinectColorViewer アイテムに書き込みます (そのため、その実行可能性について疑問があります)。
これが私のコードビハインドです(私は質問によってほぼ完全にコピーしました:SDK1.5でKinectColorViewerを使用しているので、なぜそれが機能しないのか理解できません!!)
namespace KinectSetupDev
{
public partial class MainWindow : Window
{
// Automatically finds a Kinect for you.
private readonly KinectSensorChooser sensorChooser = new KinectSensorChooser();
public KinectSensorManager KinectSensorManager01 { get; private set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
// Initialize the Kinect sensor manager.
KinectSensorManager01 = new KinectSensorManager();
KinectSensorManager01.KinectSensorChanged += this.KinectSensorChanged;
// Locate an available sensor.
sensorChooser.Start();
// Bind chooser's sensor value to the local sensor manager.
var kinectSensorBinding = new Binding("Kinect") { Source = this.sensorChooser };
BindingOperations.SetBinding(this.KinectSensorManager01, KinectSensorManager.KinectSensorProperty, kinectSensorBinding);
}
private void Window_Closed_1(object sender, EventArgs e)
{
UninitializeKinectServices(KinectSensorManager01.KinectSensor);
}
#region Kinect Discovery & Setup
private void KinectSensorChanged(object sender, KinectSensorManagerEventArgs<KinectSensor> args)
{
if (null != args.OldValue)
UninitializeKinectServices(args.OldValue);
if (null != args.NewValue)
InitializeKinectServices(KinectSensorManager01, args.NewValue);
}
// Kinect enabled apps should customize which Kinect services it initializes here.
private void InitializeKinectServices(KinectSensorManager kinectSensorManager, KinectSensor sensor)
{
// Application should enable all streams first.
kinectSensorManager.ColorStreamEnabled = true;
kinectSensorManager.DepthStreamEnabled = true;
kinectSensorManager.SkeletonStreamEnabled = true;
// Start the sensor!
try
{
sensor.Start();
sensorChooser.Kinect.ElevationAngle = 10;
tbMessages.Text = "Kinect Started";
}
catch (System.IO.IOException)
{
sensor = null;
tbMessages.Text = "Kinect Not Started" + "\r";
}
}
// Kinect enabled apps should uninitialize all Kinect services that were initialized in InitializeKinectServices() here.
private void UninitializeKinectServices(KinectSensor sensor)
{
if (sensor != null)
{
if (sensor.IsRunning)
{
sensorChooser.Kinect.ElevationAngle = 0;
sensor.Stop();
sensor.AudioSource.Stop();
}
}
}
#endregion Kinect Discovery & Setup
}
}
コンストラクターに行を追加しようとしまし DataContext = this;
たが、機能しません。
アプリケーションが実行され、Kinect が起動しますが、KinectColorViewer には何も表示されません。
さらに、誰でも と の違いを見分けることができます sensor.SkeletonStream.Enable();
か kinectSensorManager.SkeletonStreamEnabled = true;
??