Here is what the image frame ready event handler method looked like for beta 2:
void kinect_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
{
//Get raw image
PlanarImage videoFrame = e.ImageFrame.Image;
//Create array for pixel data and copy it from the image frame
Color[] color = new Color[videoFrame.Height * videoFrame.Width];
kinectRGBVideo = new Texture2D(graphics.GraphicsDevice, videoFrame.Width, videoFrame.Height);
//Read image pixel by pixel and convert RGBA to BGRA
int index = 0;
for (int y = 0; y < videoFrame.Height; y++)
{
for (int x = 0; x < videoFrame.Width; x++, index += 4)
{
color[y * videoFrame.Width + x] = new Color(videoFrame.Bits[index + 2], videoFrame.Bits[index + 1], videoFrame.Bits[index + 0]);
}
}
kinectRGBVideo.SetData(color);
}
Now we have something that resembles this:
void kinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs colorImageFrame)
{
//Get raw image
ColorImageFrame colorVideoFrame = colorImageFrame.OpenColorImageFrame();
if (colorVideoFrame != null)
{
//Create array for pixel data and copy it from the image frame
Byte[] pixelData = new Byte[colorVideoFrame.PixelDataLength];
colorVideoFrame.CopyPixelDataTo(pixelData);
//Convert RGBA to BGRA
Byte[] bgraPixelData = new Byte[colorVideoFrame.PixelDataLength];
for (int i = 0; i < pixelData.Length; i += 4)
{
bgraPixelData[i] = pixelData[i + 2];
bgraPixelData[i + 1] = pixelData[i + 1];
bgraPixelData[i + 2] = pixelData[i];
bgraPixelData[i + 3] = (Byte)255; //The video comes with 0 alpha so it is transparent
}
// Create a texture and assign the realigned pixels
colorVideo = new Texture2D(graphics.GraphicsDevice, colorVideoFrame.Width, colorVideoFrame.Height);
colorVideo.SetData(bgraPixelData);
}
}
The key differences should be quite obvious but to recap:- We use a Byte array not a Color array
- Using a ColorImageFrame not a PlanarImage to store the frame from the sensor
- Get the Pixel Data from the frame and then re-order the bytes from RGBA to BGRA
Hopefully this will be useful for some people scratching their heads with the changes from beta 2 to 1.0 final. Soon I will post what is needed for the Depth Sensor and Skeletal Tracking but I am still working on these.
No comments:
Post a Comment