2012-06-01 13 views
9

Używam programu Kinect (Microsoft SDK) z funkcją XNA. Chcę użyć GRATF do rozpoznawania znacznikówKonwertuj Kinect ColorImageFrame na Bitmapę

Jak przekonwertować dane urządzenia Kinect ColorImageFrame na System.Drawing.Bitmap lub AForge.Imaging.UnmanagedImage, które można przetworzyć za pomocą narzędzia 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

spojrzenie na ten artykuł: http://www.codeproject.com/Articles/730842/Kinect-for-Windows-version-Color-depth- i-infra (wiem, że to jest stare, ale dla tego, kto teraz to widzi) – ThunderWiring

Odpowiedz

11

Możesz znaleźć odpowiedź in this article.
Podsumowując go, metoda ta powinna załatwić sprawę:

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

dziękuję, kolego! świetna robota! –

+0

dlaczego to daje A = 255 cały czas? –

Powiązane problemy