From 74faaf065fadfc2b6e715342cbe0e85045c37f2e Mon Sep 17 00:00:00 2001 From: "johan.lachenal" Date: Fri, 2 Feb 2024 18:42:40 +0100 Subject: [PATCH] UPDATE(AllStreamsWork): AllStreamsWork but the code is ugly --- Sources/Lib/BodyImageStream.cs | 1 + Sources/Lib/ColorAndBodyImageStream.cs | 46 ++++++++++++++++++++++++-- Sources/Lib/KinectStreams.cs | 1 + Sources/Lib/KinectStreamsFactory.cs | 3 +- Sources/WpfApp/MainWindow.xaml | 13 +++++--- Sources/WpfApp/MainWindow.xaml.cs | 7 ++++ 6 files changed, 63 insertions(+), 8 deletions(-) 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 @@