2012-06-01 20 views
9

Estoy usando Kinect (Microsoft SDK) con XNA. Quiero usar GRATF para el marcador de reconocimientoConvertir Kinect ColorImageFrame en mapa de bits

Cómo convertir los datos de un Kinect a un ColorImageFrameSystem.Drawing.Bitmap o AForge.Imaging.UnmanagedImage que yo los pueda procesar con la 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

vistazo a este artículo: http://www.codeproject.com/Articles/730842/Kinect-for-Windows-version-Color-depth- e-infra (sé que esto es viejo, pero para quien lo vea ahora) – ThunderWiring

Respuesta

11

Puede encontrar la respuesta in this article.
Para resumir, este método debe hacer el truco:

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

¡gracias, amigo! ¡buen trabajo! –

+0

¿por qué esta dando A = 255 todo el tiempo? –

Cuestiones relacionadas