2011年6月26日日曜日

KinectSDK + Formアプリケーション ちょっとお遊び

現在本当は全身マウスっぽいものをやろうとしているのですが、XNA特有の問題を知らなかったりして時間を食って、現在Formアプリで作ってます。
大体は出来上がったのですが、精度面がまだかなり粗いのでその辺を改善したいと思ってます。
そんな中適当にやってたら残像?っぽいものが出てきて楽しかったので載せておきます。
適当にα値いじるだけですね。
画像は僕の腕ですw



  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using Microsoft.Research.Kinect.Nui;  
  10.   
  11. namespace Kinect_Residualimage  
  12. {  
  13.     public partial class Form1 : Form  
  14.     {  
  15.         //画面表示用  
  16.         Bitmap Texture;  
  17.   
  18.         //Kinectの変数  
  19.         Runtime nui;  
  20.   
  21.         const int ALPHA_IDX = 3;  
  22.         const int RED_IDX = 0;  
  23.         const int GREEN_IDX = 1;  
  24.         const int BLUE_IDX = 2;  
  25.         byte[] colorFrame32 = new byte[640 * 480 * 4];  
  26.   
  27.         Graphics Graphi;  
  28.   
  29.         public Form1()  
  30.         {  
  31.             InitializeComponent();  
  32.         }  
  33.   
  34.         private void Form1_Load(object sender, EventArgs e)  
  35.         {  
  36.             Texture = new Bitmap(640, 480, System.Drawing.Imaging.PixelFormat.Format32bppArgb);  
  37.   
  38.             //Kinectの初期化  
  39.             nui = new Runtime();  
  40.             try  
  41.             {  
  42.                 nui.Initialize(RuntimeOptions.UseColor);  
  43.             }  
  44.             catch (InvalidOperationException)  
  45.             {  
  46.                 Console.WriteLine("Runtime initialization failed. Please make sure Kinect device is plugged in.");  
  47.                 return;  
  48.             }  
  49.   
  50.             //video streamのOpenをする  
  51.             try  
  52.             {  
  53.                 nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);  
  54.             }  
  55.             catch (InvalidOperationException)  
  56.             {  
  57.                 Console.WriteLine("Failed to open stream. Please make sure to specify a supported image type and resolution.");  
  58.                 return;  
  59.             }  
  60.             nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_VideoFrameReady);  
  61.   
  62.             pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);  
  63.             Graphi = Graphics.FromImage(pictureBox1.Image);  
  64.         }  
  65.   
  66.         void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)  
  67.         {  
  68.             PlanarImage Image = e.ImageFrame.Image;  
  69.             byte[] converted = convertColorFrame(Image.Bits, (byte)50);  
  70.             //画像の作成  
  71.               
  72.             unsafe {  
  73.                 fixed (byte* ptr = &converted[0]) {  
  74.                     Texture = new Bitmap(Image.Width , Image.Height , Image.Width * 4 , System.Drawing.Imaging.PixelFormat.Format32bppArgb , (IntPtr)ptr);  
  75.                 }  
  76.             }  
  77.   
  78.             Graphi.DrawImage(Texture, 0, 0);  
  79.   
  80.             pictureBox1.Refresh();  
  81.         }  
  82.   
  83.         //kinectから取り込んだColorFrameのフォーマットを直す  
  84.         byte[] convertColorFrame(byte[] colorFrame , byte alpha)  
  85.         {  
  86.             for (int i = 0; i < colorFrame32.Length; i += 4)  
  87.             {  
  88.                 colorFrame32[i + ALPHA_IDX] = alpha;  
  89.                 colorFrame32[i + RED_IDX] = colorFrame[i + 0];  
  90.                 colorFrame32[i + GREEN_IDX] = colorFrame[i + 1];  
  91.                 colorFrame32[i + BLUE_IDX] = colorFrame[i + 2];  
  92.             }  
  93.             return colorFrame32;  
  94.         }  
  95.   
  96.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
  97.         {  
  98.             nui.Uninitialize();  
  99.             Environment.Exit(0);  
  100.         }  
  101.     }  
  102. }  

0 件のコメント:

コメントを投稿