Kinect學(xué)習(xí)(4)Using Kinect for Windows with XNA 彩色攝像頭
開發(fā)環(huán)境:Windows 8+VS2012+Kinect(SDK v1.6) 。
注:VS2012開發(fā)XNA游戲環(huán)境配置參照《在vs 2012 中使用xna 4.0 做開發(fā)!》
- 新建決解方案KinectCamDemo,項(xiàng)目名稱KinectCam。

- 添加引用。右鍵項(xiàng)目—>添加引用—>選中Microsoft.Kinect.dll—>確定。

- 打開Game1.cs,重命名為:KinectCameraGame ,接下來,添加命名空間。
using Microsoft.Kinect;
- 定義私有成員變量
KinectSensor kinect; Texture2D kinectVideoTexture; Rectangle videoDisplayRecatangle; byte[] colorData = null;
- 加載游戲所有內(nèi)容的時(shí)候啟動(dòng)Kinect設(shè)備
/// <summary> /// 對(duì)于每個(gè)游戲會(huì)調(diào)用一次 LoadContent, /// 用于加載所有內(nèi)容。 /// </summary> protected override void LoadContent() { // 創(chuàng)建新的 SpriteBatch,可將其用于繪制紋理。 spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: 在此處使用 this.Content 加載游戲內(nèi)容 //啟動(dòng)Kinect設(shè)備 kinect = KinectSensor.KinectSensors.Where(k => k.Status == KinectStatus.Connected).FirstOrDefault(); kinect.ColorStream.Enable(); kinect.ColorFrameReady += kinect_ColorFrameReady; kinect.Start(); }
- 彩色圖像流事件處理
void kinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) { //獲取圖像,顯示 using (ColorImageFrame colorFrame=e.OpenColorImageFrame()) { if (colorFrame==null) { return; } if (colorData==null) { colorData = new byte[colorFrame.Width * colorFrame.Height * 4]; } colorFrame.CopyPixelDataTo(colorData); kinectVideoTexture = new Texture2D(GraphicsDevice, colorFrame.Width, colorFrame.Height); Color[] bitmap = new Color[colorFrame.Width * colorFrame.Height]; int sourceOffest = 0; for (int i = 0; i < bitmap.Length; i++) { bitmap[i] = new Color(colorData[sourceOffest + 2],colorData[sourceOffest+1],colorData[sourceOffest],255); sourceOffest+=4; } kinectVideoTexture.SetData(bitmap); } }
- 繪制圖象,顯示在界面
/// <summary> /// 當(dāng)游戲該進(jìn)行自我繪制時(shí)調(diào)用此項(xiàng)。 /// </summary> /// <param name="gameTime">提供計(jì)時(shí)值的快照。</param> protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: 在此處添加繪圖代碼 spriteBatch.Begin(); if (kinectVideoTexture != null) { spriteBatch.Draw(kinectVideoTexture, videoDisplayRecatangle, Color.White); } spriteBatch.End(); base.Draw(gameTime); }
- 卸載游戲是,停止Kinect設(shè)備
/// <summary> /// 對(duì)于每個(gè)游戲會(huì)調(diào)用一次 UnloadContent, /// 用于取消加載所有內(nèi)容。 /// </summary> protected override void UnloadContent() { // TODO: 在此處取消加載任何非 ContentManager 內(nèi)容 this.kinect.Stop(); }
最后,顯示的效果。

作者:十一_x
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。知識(shí)共享署名-非商業(yè)性使用-相同方式共享 2.5 中國(guó)大陸許可協(xié)議

浙公網(wǎng)安備 33010602011771號(hào)