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.
93 lines
3.1 KiB
93 lines
3.1 KiB
using Microsoft.Kinect;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Media;
|
|
using System.Windows;
|
|
|
|
namespace Lib
|
|
{
|
|
class InfraredImageStream : KinectStream
|
|
{
|
|
private InfraredFrameReader reader;
|
|
private byte[] infraredPixels;
|
|
public byte[] InfraredPixels
|
|
{
|
|
get
|
|
{
|
|
return infraredPixels;
|
|
}
|
|
private set
|
|
{
|
|
infraredPixels = value;
|
|
}
|
|
}
|
|
public InfraredFrameReader Reader
|
|
{
|
|
get
|
|
{
|
|
return reader;
|
|
}
|
|
private set
|
|
{
|
|
reader = value;
|
|
}
|
|
}
|
|
public InfraredImageStream(KinectManager kinectManager) : base(kinectManager)
|
|
{
|
|
var frameDescription = KinectManager.Sensor.InfraredFrameSource.FrameDescription;
|
|
this.Bitmap = new WriteableBitmap(frameDescription.Width, frameDescription.Height, 96.0, 96.0, PixelFormats.Gray8, null);
|
|
reader = KinectManager.Sensor.InfraredFrameSource.OpenReader();
|
|
reader.FrameArrived += Reader_InfraredFrameArrived;
|
|
infraredPixels = new byte[frameDescription.Width * frameDescription.Height];
|
|
}
|
|
|
|
public override void Stop()
|
|
{
|
|
if (reader != null)
|
|
{
|
|
reader.Dispose();
|
|
reader = null;
|
|
}
|
|
}
|
|
private void ProcessInfraredFrameData(ushort[] frameData, uint frameDataSize)
|
|
{
|
|
// Convertir les données infrarouges en niveaux de gris
|
|
for (int i = 0; i < frameDataSize; ++i)
|
|
{
|
|
// Convertir la valeur infrarouge en une intensité lumineuse
|
|
byte intensity = (byte)(frameData[i] >> 8);
|
|
InfraredPixels[i] = intensity;
|
|
}
|
|
}
|
|
|
|
private void Reader_InfraredFrameArrived(object sender, InfraredFrameArrivedEventArgs e)
|
|
{
|
|
using (InfraredFrame infraredFrame = e.FrameReference.AcquireFrame())
|
|
{
|
|
if (infraredFrame != null)
|
|
{
|
|
FrameDescription infraredFrameDescription = infraredFrame.FrameDescription;
|
|
|
|
// Créez un tableau pour stocker les données infrarouges
|
|
ushort[] infraredData = new ushort[infraredFrameDescription.LengthInPixels];
|
|
infraredFrame.CopyFrameDataToArray(infraredData);
|
|
|
|
// Traitez les données infrarouges
|
|
ProcessInfraredFrameData(infraredData, infraredFrameDescription.LengthInPixels);
|
|
|
|
// Mettez à jour le bitmap infrarouge
|
|
this.Bitmap.WritePixels(
|
|
new Int32Rect(0, 0, infraredFrameDescription.Width, infraredFrameDescription.Height),
|
|
this.infraredPixels,
|
|
infraredFrameDescription.Width,
|
|
0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|