2012-06-01 13 views
9

Utilizzo Kinect (Microsoft SDK) con XNA. Voglio usare GRATF per l'indicatore di riconoscimentoConverti Kinect ColorImageFrame in Bitmap

Come convertire i dati di un Kinect ColorImageFrame ad un System.Drawing.Bitmap o AForge.Imaging.UnmanagedImage che posso lavorare con 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); 

    ... 
} 
+0

un'occhiata a questo articolo: http://www.codeproject.com/Articles/730842/Kinect-for-Windows-version-Color-depth- e-infra (so che questo è vecchio, ma per chiunque lo veda ora) – ThunderWiring

risposta

11

È possibile trovare la risposta in this article.
Per riassumere, questo metodo dovrebbe fare il trucco:

Bitmap ImageToBitmap(ColorImageFrame Image) 
{ 
    byte[] pixeldata = new byte[Image.PixelDataLength]; 
    Image.CopyPixelDataTo(pixeldata); 
    Bitmap bmap = new Bitmap(Image.Width, Image.Height, PixelFormat.Format32bppRgb); 
    BitmapData bmapdata = bmap.LockBits(
     new Rectangle(0, 0, Image.Width, Image.Height), 
     ImageLockMode.WriteOnly, 
     bmap.PixelFormat); 
    IntPtr ptr = bmapdata.Scan0; 
    Marshal.Copy(pixeldata, 0, ptr, Image.PixelDataLength); 
    bmap.UnlockBits(bmapdata); 
    return bmap; 
} 
+0

grazie amico! ottimo lavoro! –

+0

perché questo dà A = 255 tutto il tempo? –