zoukankan      html  css  js  c++  java
  • Kinect学习(4)Using Kinect for Windows with XNA 彩色摄像头

    开发环境:Windows 8+VS2012+Kinect(SDK v1.6) 。

    注:VS2012开发XNA游戏环境配置参照《在vs 2012 中使用xna 4.0 做开发!

    • 新建决解方案KinectCamDemo,项目名称KinectCam。

    • 添加引用。右键项目—>添加引用—>选中Microsoft.Kinect.dll—>确定。

    • 打开Game1.cs,重命名为:KinectCameraGame ,接下来,添加命名空间。
        using Microsoft.Kinect;
    • 定义私有成员变量
        KinectSensor kinect;
    
        Texture2D kinectVideoTexture;
        Rectangle videoDisplayRecatangle;
        byte[] colorData = null;
    • 加载游戏所有内容的时候启动Kinect设备
            /// <summary>
            /// 对于每个游戏会调用一次 LoadContent,
            /// 用于加载所有内容。
            /// </summary>
            protected override void LoadContent()
            {
                // 创建新的 SpriteBatch,可将其用于绘制纹理。
                spriteBatch = new SpriteBatch(GraphicsDevice);
    
                // TODO: 在此处使用 this.Content 加载游戏内容
                //启动Kinect设备
                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>
            /// 当游戏该进行自我绘制时调用此项。
            /// </summary>
            /// <param name="gameTime">提供计时值的快照。</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设备
         /// <summary>
            /// 对于每个游戏会调用一次 UnloadContent,
            /// 用于取消加载所有内容。
            /// </summary>
            protected override void UnloadContent()
            {
                // TODO: 在此处取消加载任何非 ContentManager 内容
                this.kinect.Stop();
            }


    最后,显示的效果。

     

     

     

    作者:十一_x
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议
  • 相关阅读:
    Loadrunner日志设置与查看
    Mysqlfunc.c
    loadrunner生成随机uuid的方法
    数据库连接
    FAQ_2
    JAVA VUser
    FAQ_1
    LoadRunner中的Web 函数列表
    MySQL性能诊断与调优
    LoadRunner书籍推荐
  • 原文地址:https://www.cnblogs.com/shiyix/p/2853271.html
Copyright © 2011-2022 走看看