2

我试图让两个 kinect一个 C#/WPF 项目中运行。kinect 连接到不同的 USB 控制器(使用不同的控制器我不是指不同的端口)。

XAML中,我的代码如下:

<Window x:Class="Microsoft.Samples.Kinect.ColorBasicsind file .MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Color Basics" Height="290" Width="770" Loaded="WindowLoaded" Closing="WindowClosing">
    <Grid>
        <Image Name="Image1" Width="320" Height="240" Margin="10,10,432,458"/>
        <Image Name="Image2" Width="320" Height="240" Margin="432,10,10,63"/>
    </Grid>
</Window>

在 C# 中,代码隐藏文件如下:

namespace Microsoft.Samples.Kinect.ColorBasics
{
    using System;
    using System.Globalization;
    using System.IO;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using Microsoft.Kinect;

    public partial class MainWindow : Window
    {
        private KinectSensor sensor1;
    private KinectSensor sensor2;

    private WriteableBitmap colorBitmap1;
    private WriteableBitmap colorBitmap2;

    private byte[] colorPixels1;
    private byte[] colorPixels2;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void WindowLoaded(object sender, RoutedEventArgs e)
    {
        //init sensor 1
        this.sensor1.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
        this.colorPixels1 = new byte[this.sensor1.ColorStream.FramePixelDataLength];
        this.colorBitmap1 = new WriteableBitmap(this.sensor1.ColorStream.FrameWidth, this.sensor1.ColorStream.FrameHeight, 96.0, 96.0, PixelFormats.Bgr32, null);
        this.Image1.Source = this.colorBitmap1;
        this.sensor1.ColorFrameReady += this.SensorColorFrameReady1;
        this.sensor1.Start();

        //init sensor 2
        this.sensor2.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
        this.colorPixels2 = new byte[this.sensor2.ColorStream.FramePixelDataLength];
        this.colorBitmap2 = new WriteableBitmap(this.sensor2.ColorStream.FrameWidth, this.sensor2.ColorStream.FrameHeight, 96.0, 96.0, PixelFormats.Bgr32, null);
        this.Image2.Source = this.colorBitmap2;
        this.sensor2.ColorFrameReady += this.SensorColorFrameReady2;
        this.sensor2.Start();
    }

    //sensor 1 new-frame-event-handler
    private void SensorColorFrameReady1(object sender, ColorImageFrameReadyEventArgs e)
    {
        using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {
            if (colorFrame != null)
            {
                colorFrame.CopyPixelDataTo(this.colorPixels1);
                this.colorBitmap1.WritePixels(
                    new Int32Rect(0, 0, this.colorBitmap1.PixelWidth, this.colorBitmap1.PixelHeight),
                    this.colorPixels1,
                    this.colorBitmap1.PixelWidth * sizeof(int),
                    0);
            }
        }
    }

    //sensor 2 new-frame-event-handler
    private void SensorColorFrameReady2(object sender, ColorImageFrameReadyEventArgs e)
    {
        using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {
            if (colorFrame != null)
            {
                colorFrame.CopyPixelDataTo(this.colorPixels2);
                this.colorBitmap2.WritePixels(
                    new Int32Rect(0, 0, this.colorBitmap2.PixelWidth, this.colorBitmap2.PixelHeight),
                    this.colorPixels2,
                    this.colorBitmap2.PixelWidth * sizeof(int),
                    0);
            }
        }
    }

    private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (null != this.sensor1)
        {
            this.sensor1.Stop();
        }
    }
}
}

尽管如此,其中一个XAML 图像对象仍然是黑色的,而另一个显示的是静止的图片

你能告诉我为什么会这样吗?

(PS:请不要深入讨论为什么我发布的代码不是面向对象的!我知道 DRY、KISS、Coherence 和 Cohesion 是什么。)

4

0 回答 0