Created
June 28, 2012 05:48
-
-
Save kaorun55/3009363 to your computer and use it in GitHub Desktop.
kinectionjp training 03
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Window x:Class="training03.MainWindow" | |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
Title="MainWindow" Height="350" Width="525" | |
Loaded="Window_Loaded" Closing="Window_Closing"> | |
<Grid> | |
<Image Name="rgbImage" /> | |
</Grid> | |
</Window> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq; | |
using System.Windows; | |
using System.Windows.Media; | |
using System.Windows.Media.Imaging; | |
using Microsoft.Kinect; | |
namespace training03 | |
{ | |
/// <summary> | |
/// MainWindow.xaml の相互作用ロジック | |
/// </summary> | |
public partial class MainWindow : Window | |
{ | |
/// <summary> | |
/// 制御するKinectセンサー | |
/// </summary> | |
KinectSensor kinect = null; | |
/// <summary> | |
/// Kinectセンサーからの画像情報を受けとるバッファ | |
/// </summary> | |
private byte[] pixelBuffer = null; | |
/// <summary> | |
/// 画面に表示するビットマップ | |
/// </summary> | |
private WriteableBitmap bmpBuffer = null; | |
/// <summary> | |
/// コンストラクター | |
/// </summary> | |
public MainWindow() | |
{ | |
InitializeComponent(); | |
} | |
/// <summary> | |
/// 初期化処理 | |
/// </summary> | |
/// <param name="sender"></param> | |
/// <param name="e"></param> | |
private void Window_Loaded( object sender, RoutedEventArgs e ) | |
{ | |
try { | |
// 利用可能なKinectを探す | |
kinect = KinectSensor.KinectSensors.First( k => | |
{ | |
return k.Status == KinectStatus.Connected; | |
} ); | |
// 利用可能なKinectがなかった | |
if ( kinect == null ) { | |
throw new Exception( "Kinectが接続されていないか、準備ができていません" ); | |
} | |
// カラーストリームの有効化 | |
kinect.ColorStream.Enable( ColorImageFormat.RgbResolution640x480Fps30 ); | |
// バッファの初期化 | |
pixelBuffer = new byte[kinect.ColorStream.FramePixelDataLength]; | |
bmpBuffer = new WriteableBitmap( kinect.ColorStream.FrameWidth, | |
kinect.ColorStream.FrameHeight, 96, 96, PixelFormats.Bgr32, null ); | |
rgbImage.Source = bmpBuffer; | |
// イベントハンドラの登録 | |
kinect.ColorFrameReady += | |
new EventHandler<ColorImageFrameReadyEventArgs>( kinect_ColorFrameReady ); | |
// Kinectセンサーからのストリーム取得を開始 | |
kinect.Start(); | |
} | |
catch ( Exception ex ) { | |
MessageBox.Show( ex.Message ); | |
} | |
} | |
/// <summary> | |
/// カラーストリームのデータ更新イベント | |
/// </summary> | |
/// <param name="sender"></param> | |
/// <param name="e"></param> | |
void kinect_ColorFrameReady( object sender, ColorImageFrameReadyEventArgs e ) | |
{ | |
try { | |
// 更新データを取得する | |
using ( ColorImageFrame imageFrame = e.OpenColorImageFrame() ) { | |
if ( imageFrame != null ) { | |
// 画像情報をバッファにコピー | |
imageFrame.CopyPixelDataTo( pixelBuffer ); | |
// ビットマップに描画 | |
Int32Rect src = new Int32Rect( 0, 0, imageFrame.Width, imageFrame.Height ); | |
bmpBuffer.WritePixels( src, pixelBuffer, imageFrame.Width * 4, 0 ); | |
} | |
} | |
} | |
catch ( Exception ex ) { | |
MessageBox.Show( ex.Message ); | |
} | |
} | |
/// <summary> | |
/// 終了処理(ウィンドウが閉じられるとき) | |
/// </summary> | |
/// <param name="sender"></param> | |
/// <param name="e"></param> | |
private void Window_Closing( object sender, System.ComponentModel.CancelEventArgs e ) | |
{ | |
try { | |
// Kinectを動かしていたら止める | |
if ( kinect != null ) { | |
// イベントハンドラの削除 | |
kinect.ColorFrameReady -= kinect_ColorFrameReady; | |
// ストリームの停止とリソースの解放 | |
kinect.Stop(); | |
kinect.Dispose(); | |
kinect = null; | |
} | |
} | |
catch ( Exception ex ) { | |
MessageBox.Show( ex.Message ); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment