diff --git a/Sources/Lib/BodyImageStream.cs b/Sources/Lib/BodyImageStream.cs
index bcebacb..8b7b9bc 100644
--- a/Sources/Lib/BodyImageStream.cs
+++ b/Sources/Lib/BodyImageStream.cs
@@ -44,6 +44,7 @@ namespace Lib
Bitmap = new WriteableBitmap(framedescription.Width, framedescription.Height, 96.0, 96.0, PixelFormats.Bgr32, null);
reader = kinectmanager.Sensor.BodyFrameSource.OpenReader();
reader.FrameArrived += Reader_BodyFrameArrived;
+
// initialiser le tableau des corps
this.bodies = new Body[kinectmanager.Sensor.BodyFrameSource.BodyCount];
Canvas = skeletonCanvas;
diff --git a/Sources/Lib/ColorAndBodyImageStream.cs b/Sources/Lib/ColorAndBodyImageStream.cs
index 9ea035f..f410334 100644
--- a/Sources/Lib/ColorAndBodyImageStream.cs
+++ b/Sources/Lib/ColorAndBodyImageStream.cs
@@ -18,10 +18,14 @@ namespace Lib
public BodyFrameReader Reader
{
get { return reader; }
- set { reader = value; }
+ private set { reader = value; }
}
- //private ColorFrameReader colorReader;
+ private ColorFrameReader _colorReader;
+ public ColorFrameReader ColorReader {
+ get { return _colorReader; }
+ private set { _colorReader = value; }
+ }
private Body[] bodies;
public Body[] Bodies
@@ -36,6 +40,11 @@ namespace Lib
Reader.Dispose();
Reader = null;
}
+ if(ColorReader != null)
+ {
+ ColorReader.Dispose();
+ ColorReader = null;
+ }
}
@@ -45,6 +54,8 @@ namespace Lib
Bitmap = new WriteableBitmap(framedescription.Width, framedescription.Height, 96.0, 96.0, PixelFormats.Bgr32, null);
reader = kinectmanager.Sensor.BodyFrameSource.OpenReader();
reader.FrameArrived += Reader_BodyFrameArrived;
+ ColorReader = KinectManager.Sensor.ColorFrameSource.OpenReader();
+ ColorReader.FrameArrived += Reader_ColorFrameArrived;
// initialiser le tableau des corps
this.bodies = new Body[kinectmanager.Sensor.BodyFrameSource.BodyCount];
Canvas = skeletonCanvas;
@@ -167,5 +178,36 @@ namespace Lib
}
}
}
+ private void Reader_ColorFrameArrived(object sender, ColorFrameArrivedEventArgs e)
+ {
+ using (ColorFrame colorFrame = e.FrameReference.AcquireFrame())
+ {
+ if (colorFrame != null)
+ {
+ // ... Logique existante pour traiter la frame
+ //Debug.WriteLine("Traitement de la frame de couleur.");
+ FrameDescription colorFrameDescription = colorFrame.FrameDescription;
+
+ using (KinectBuffer colorBuffer = colorFrame.LockRawImageBuffer())
+ {
+ this.Bitmap.Lock();
+
+ // Vérifier si la taille de l'image a changé
+ if ((colorFrameDescription.Width == this.Bitmap.PixelWidth) && (colorFrameDescription.Height == this.Bitmap.PixelHeight))
+ {
+ colorFrame.CopyConvertedFrameDataToIntPtr(
+ this.Bitmap.BackBuffer,
+ (uint)(colorFrameDescription.Width * colorFrameDescription.Height * 4),
+ ColorImageFormat.Bgra);
+
+ this.Bitmap.AddDirtyRect(new Int32Rect(0, 0, this.Bitmap.PixelWidth, this.Bitmap.PixelHeight));
+ }
+
+ this.Bitmap.Unlock();
+ }
+ //Debug.WriteLine("Frame de couleur traitée.");
+ }
+ }
+ }
}
}
diff --git a/Sources/Lib/KinectStreams.cs b/Sources/Lib/KinectStreams.cs
index 5744db3..7909557 100644
--- a/Sources/Lib/KinectStreams.cs
+++ b/Sources/Lib/KinectStreams.cs
@@ -12,6 +12,7 @@ namespace Lib
Color,
Depth,
IR,
+ Body,
ColorAndBody
}
}
diff --git a/Sources/Lib/KinectStreamsFactory.cs b/Sources/Lib/KinectStreamsFactory.cs
index ce211e9..1571530 100644
--- a/Sources/Lib/KinectStreamsFactory.cs
+++ b/Sources/Lib/KinectStreamsFactory.cs
@@ -31,7 +31,8 @@ namespace Lib
{ KinectStreams.Color, () => new ColorImageStream(KinectManager) },
{ KinectStreams.Depth, () => new DepthImageStream(KinectManager) },
{ KinectStreams.IR, () => new InfraredImageStream(KinectManager) },
- { KinectStreams.ColorAndBody, () => new BodyImageStream(KinectManager,SkeletonCanvas) }
+ { KinectStreams.Body, () => new BodyImageStream(KinectManager,SkeletonCanvas) },
+ { KinectStreams.ColorAndBody, () => new ColorAndBodyImageStream(KinectManager,SkeletonCanvas) }
};
}
diff --git a/Sources/WpfApp/MainWindow.xaml b/Sources/WpfApp/MainWindow.xaml
index 08613ef..dd3f6fb 100644
--- a/Sources/WpfApp/MainWindow.xaml
+++ b/Sources/WpfApp/MainWindow.xaml
@@ -22,12 +22,15 @@
-
-
+
+
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sources/WpfApp/MainWindow.xaml.cs b/Sources/WpfApp/MainWindow.xaml.cs
index 181a008..823fe81 100644
--- a/Sources/WpfApp/MainWindow.xaml.cs
+++ b/Sources/WpfApp/MainWindow.xaml.cs
@@ -97,6 +97,13 @@ namespace WpfApp
CurrentKinectStream.Start();
}
+ private void ToBodyImageStream(object sender, RoutedEventArgs e)
+ {
+ CurrentKinectStream.Stop();
+ CurrentKinectStream = Factory[KinectStreams.Body];
+ Debug.WriteLine(CurrentKinectStream.GetType().Name);
+ CurrentKinectStream.Start();
+ }
private void ToColorAndBodyImageStream(object sender, RoutedEventArgs e)
{
CurrentKinectStream.Stop();