You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Kinect-Project/Sources/Lib/ColorImageStream.cs

86 lines
2.9 KiB

using Microsoft.Kinect;
using System.ComponentModel;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace Lib
{
public class ColorImageStream : KinectStream
{
private ColorFrameReader reader;
public ColorFrameReader Reader
{
get { return reader; }
set { reader = value; }
}
public ColorImageStream(KinectManager kinectManager)
: base(kinectManager)
{
var frameDescription = KinectManager.Sensor.ColorFrameSource.CreateFrameDescription(
ColorImageFormat.Bgra
);
this.Bitmap = new WriteableBitmap(
frameDescription.Width,
frameDescription.Height,
96.0,
96.0,
PixelFormats.Bgr32,
null
);
reader = KinectManager.Sensor.ColorFrameSource.OpenReader();
reader.FrameArrived += Reader_ColorFrameArrived;
}
public override void Stop()
{
if (reader != null)
{
reader.Dispose();
reader = null;
}
}
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.");
}
}
}
}
}