using Microsoft.Kinect; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; namespace Lib { public class ColorImageStream : KinectStream { private ColorFrameReader reader; private WriteableBitmap colorBitmap; public WriteableBitmap ColorBitmap => colorBitmap; public ColorImageStream(KinectSensor sensor) : base(sensor) { reader = sensor.ColorFrameSource.OpenReader(); var frameDescription = sensor.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Bgra); colorBitmap = new WriteableBitmap(frameDescription.Width, frameDescription.Height, 96.0, 96.0, PixelFormats.Bgr32, null); reader.FrameArrived += Reader_FrameArrived; } private void Reader_FrameArrived(object sender, ColorFrameArrivedEventArgs e) { using (var 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.colorBitmap.Lock(); // Vérifier si la taille de l'image a changé if ((colorFrameDescription.Width == this.colorBitmap.PixelWidth) && (colorFrameDescription.Height == this.colorBitmap.PixelHeight)) { colorFrame.CopyConvertedFrameDataToIntPtr( this.colorBitmap.BackBuffer, (uint)(colorFrameDescription.Width * colorFrameDescription.Height * 4), ColorImageFormat.Bgra); this.colorBitmap.AddDirtyRect(new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight)); } this.colorBitmap.Unlock(); } //Debug.WriteLine("Frame de couleur traitée."); } } } } }