9

I´m using Kinect (Microsoft SDK) with XNA. I want to use GRATF for marker-recognition

How to convert the data of a Kinect ColorImageFrame to a System.Drawing.Bitmap or AForge.Imaging.UnmanagedImage that I can process them with GRATF?

void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
    Bitmap bitmap = null;
    ColorImageFrame frame = e.OpenColorImageFrame();
    byte[] buffer = new byte[frame.PixelDataLength];
    frame.CopyPixelData(buffer);

    // how to convert the data in buffer to a bitmap?

    var glyphs = recognizer.FindGlyphs(bitmap);

    ...
}
Roy Shmuli
  • 4,979
  • 1
  • 24
  • 38
0xDEADBEEF
  • 3,401
  • 8
  • 37
  • 66
  • look at this article: http://www.codeproject.com/Articles/730842/Kinect-for-Windows-version-Color-depth-and-infra (i know this is old, but for whoever seeing it now) – ThunderWiring Sep 27 '16 at 08:01

1 Answers1

11

You can find the answer in this article.
To summarize it, this method should do the trick:

Bitmap ImageToBitmap(ColorImageFrame img)
{
     byte[] pixeldata = new byte[img.PixelDataLength];
     img.CopyPixelDataTo(pixeldata);
     Bitmap bmap = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppRgb);
     BitmapData bmapdata = bmap.LockBits(
         new Rectangle(0, 0, img.Width, img.Height),
         ImageLockMode.WriteOnly, 
         bmap.PixelFormat);
     IntPtr ptr = bmapdata.Scan0;
     Marshal.Copy(pixeldata, 0, ptr, img.PixelDataLength);
     bmap.UnlockBits(bmapdata);
     return bmap;
 }
Community
  • 1
  • 1
Botz3000
  • 39,020
  • 8
  • 103
  • 127
  • why is this giving A=255 all the time? – Md Sifatul Islam Apr 02 '17 at 11:48
  • @MdSifatulIslam, the `PixelFormat.Format32bppRgb` does not use alpha. Use `PixelFormat.Format32bppArgb` to get an alpha value. You will have to pad the `pixeldata` array with an alpha value before the `Marshal.Copy` or the data will be the wrong size. –  Mar 26 '19 at 23:23