2015-02-11

Kinect v2にてRGBカメラを表示する

先行して入手したものの、全く手をつけていなかったKinect v2での開発をはじめました。とりあえずRGBカメラの表示です。噂通り、書き方が変わっているとことが多いですね。ただ、最終的にbyte[]に格納してWriteablebitmapにすればいいというのは従来通りなので、全面修正にはならないでしょう。なお、RGBカメラを表示後、数秒後にプログラムが落ちる事象が置きましたが、win8.1のバグのようです。とりあえず、ガーベージコレクションを強制実行することで回避できます。

WriteableBitmap colorBitmap;
byte[] ColorImagePixelData ;
Int32Rect colorImageBitmapRect;
FrameDescription myColorFrameDescripton;
public MainWindow(){
InitializeComponent();
KinectSensor kinect = KinectSensor.GetDefault();
if (kinect != null){
ColorFrameReader colorframereader = kinect.ColorFrameSource.OpenReader();
myColorFrameDescripton = kinect.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Bgra);
ColorImagePixelData = new byte[myColorFrameDescripton.Width * myColorFrameDescripton.Height * myColorFrameDescripton.BytesPerPixel];
colorBitmap = new WriteableBitmap(myColorFrameDescripton.Width, myColorFrameDescripton.Height, 96.0, 96.0, PixelFormats.Bgr32, null);
colorframereader.FrameArrived+=colorframereader_FrameArrived;
kinect.Open();
}
}
void colorframereader_FrameArrived(object sender, ColorFrameArrivedEventArgs e){
using( ColorFrame myColorFrame= e.FrameReference.AcquireFrame()){
if(myColorFrame!=null){
myColorFrame.CopyConvertedFrameDataToArray(ColorImagePixelData, ColorImageFormat.Bgra);
colorImageBitmapRect = new Int32Rect(0, 0, myColorFrameDescripton.Width, myColorFrameDescripton.Height);
image1.Source = BitmapSource.Create(myColorFrameDescripton.Width, myColorFrameDescripton.Height, 96, 96,PixelFormats.Bgra32, null, ColorImagePixelData, myColorFrameDescripton.Width * (int)myColorFrameDescripton.BytesPerPixel);
}
GC.Collect(); //Win8.1のバグ?らしいのでこのおまじないを書いておくこと }
}


0 件のコメント:

コメントを投稿