2011-09-13 5 views
1

私はKinectからビデオストリームを受信して​​います。データは32ビットのBGRX形式でパックされています。このデータをTexture2dに直接移動したいのですが、一致するSurfaceFormatが見つかりません。私が見つけることができる最も近いものは32bit RGBXに見えるSurfaceFormat.Colorです。XNAにはBGRA/BGRXサーフェス形式がありますか?

互換フォーマットがないと仮定します。何が2Dテクスチャにデータを変換してプッシュする最も簡単な方法です

私が良いでしょう。このような何かを考えていたが、それはフレームレートが遅くているようだ:

編集を:私は少しのアルゴリズムを変更今はまともに走っているようだ。

void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e) 
    { 
     byte x; 
     for (int i = 0; i < e.ImageFrame.Image.Bits.Length; i += 4) 
     { 
      x = e.ImageFrame.Image.Bits[i]; 
      e.ImageFrame.Image.Bits[i] = e.ImageFrame.Image.Bits[i + 2]; 
      e.ImageFrame.Image.Bits[i + 2] = x; 
     } 
     canvas.SetData(e.ImageFrame.Image.Bits); 
    } 

答えて

0

これは私が思い付くことができた最速のものです:私は直接バイトを移動する4200

のフレームレートを取得し、全く関係のKinectがなけれ

void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e) 
    { 
     byte[] bits = e.ImageFrame.Image.Bits; 
     for (int i = 0; i < bits.Length; i += 4) 
     { 
      frameBuffer[i] = bits[i + 2]; 
      frameBuffer[i + 1] = bits[i + 1]; 
      frameBuffer[i + 2] = bits[i]; 
     } 
     canvas.SetData(frameBuffer); 
    } 

texture差異を修正せずにtexture2dを返します。3100

e.ImageFrame.Image.Bitsで自分自身にローカル変数を与え、そのバイトを事前に割り当てられたバッファf私はあなたの場所にビットを交換し、私の元の質問に記載されているし、その後約750

ので、ぶつかったこのアルゴリズムに変更しおさらいして歩留まりをにTexture2Dに送信している2700

アルゴリズム:あなたは私が取りに行くようバイトをixing 2700から750へのフレームレートは

関連する問題