2016-05-05 52 views
1

我想从Microsoft Kinect彩色摄像机视频流中分离红色,绿色,蓝色的彩色流。到目前为止,为了接收彩色视频流,我使用了Kinect for Windows SDK 2.0提供的示例代码。来自Microsoft Kinect彩色摄像机视频流的独立红色流

每当接收到新帧时,彩色帧的事件处理程序就会将帧写入WriteableBitmap对象。在复制到WriteableBitmap对象之前,如何将红色流从彩色框中分离出来?

private void Reader_ColorFrameArrived(object sender, ColorFrameArrivedEventArgs e) 
    { 
     // ColorFrame is IDisposable 
     using (ColorFrame colorFrame = e.FrameReference.AcquireFrame()) 
     { 
      if (colorFrame != null) 
      { 
       FrameDescription colorFrameDescription = colorFrame.FrameDescription; 

        using (KinectBuffer colorBuffer = colorFrame.LockRawImageBuffer()) 
        { 
         this.colorBitmap.Lock(); 

         // verify data and write the new color frame data to the display bitmap 
         if ((colorFrameDescription.Width == this.colorBitmap.PixelWidth) && (colorFrameDescription.Height == this.colorBitmap.PixelHeight)) 
         { 
          colorFrame.CopyConvertedFrameDataToIntPtr(
           this.colorBitmap.BackBuffer, 
           (uint)(colorFrameDescription.Width * colorFrameDescription.Height * 4), 
           ColorImageFormat.Bgra); 

          this.colorBitmap.AddDirtyRect(new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight)); 
         } 

         this.colorBitmap.Unlock(); 
        } 
      } 
     } 
    } 

日报.NET技巧有article关于这个,但他们在这里展示的代码是不够清晰。 This是我需要的结果(以及一篇Daily .NET Tips在他们的文章中显示)。

请帮忙。

回答

0

使用此方法 - colorFrame.CopyConvertedFrameDataToIntPtr - 我无法操作framedata中的实际字节。

您需要手动执行,并在for循环中处理字节。

+0

如何以字节为单位存储数据? – misfitmaniac

+0

我在一些帖子中看到了这个LOC,但这仅适用于WriteableBitmap对象。 'byte * imgData =(byte *)bitmap.BackBuffer;' 但是我想在将Kinect中的帧数据写入位图对象之前以字节为单位存储和处理帧数据。 – misfitmaniac

相关问题