2011-11-10 2 views
1

私は、プレーヤーを代表しないすべてのピクセルが黒に設定されているkinectから画像を生成しようとしています。Kinectの深さ(プレイヤーインデックス+ビデオストリーム)

私の考えは、このタスクを達成するために、ビデオストリームとともにプレイヤーインデックスとともにデプスストリームによって生成されたデータを使用することです。

byte[] pixelData = video.imageFrame.Bits; 
byte[] depthData = depth.imageFrame.Bits; 

var depthIndex = 0; 
for (var y = 0; y < height; y++) 
{ 
    var heightOffset = y * width; 

    for (var x = 0; x < width; x++) 
    { 
      var index = (x + heightOffset) * 4; 

      var distance = GetDistanceWithPlayerIndex(depthData[depthIndex], depthData[depthIndex + 1]); 

      if (GetPlayerIndex(depthData[depthIndex]) == 0) 
      { 
       pixelData[index + BlueIndex] = 0; 
       pixelData[index + GreenIndex] = 0; 
       pixelData[index + RedIndex] = 0; 
      } 
    } 
} 

私は現在depthwithplayerindexと同じ解像度を持つようにビデオストリームデータを取得しようとしていることに取り組んでいます問題:

私の希望は、このような何かをすることでした。

私はここの他の記事から一緒にいくつかのものをつなぎしようとしましたが、私はそれを動作させることはできません。

private byte[] ScaleVideoImage(ImageFrame imageFrame, int newWidth, int newHeight) 
     { 
      //convert imageFrame to byte array 
      Byte[] oPixelData = imageFrame.Image.Bits; 

      Image tempImage = BytesToImg(oPixelData); 
      //scale image 
      Bitmap bmp = new Bitmap(newWidth, newHeight); 
      using (Graphics graphics = Graphics.FromImage(bmp)) 
      { 
       graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
       graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
       graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

       graphics.DrawImage(tempImage, 0, 0, bmp.Width, bmp.Height); 
      } 
      //Convert image to byte array 
      MemoryStream ms1 = new MemoryStream(); 
      bmp.Save(ms1, ImageFormat.Jpeg); 
      byte[] result = ms1.GetBuffer(); 
      bmp.Dispose(); 
      ms1.Close(); 
      return result; 
     } 

任意のアイデア?

答えて

関連する問題