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.
86 lines
2.9 KiB
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.");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|