2012-06-01 27 views
9

Tôi đang sử dụng Kinect (Microsoft SDK) với XNA. Tôi muốn sử dụng GRATF cho điểm đánh dấu nhận dạngChuyển đổi Kinect ColorImageFrame thành Bitmap

Làm thế nào để chuyển đổi dữ liệu của một Kinect ColorImageFrame đến một System.Drawing.Bitmap hoặc AForge.Imaging.UnmanagedImage mà tôi có thể xử lý chúng với 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

xem bài viết này: http://www.codeproject.com/Articles/730842/Kinect-for-Windows-version-Color-depth- và-infra (tôi biết đây là cũ, nhưng đối với bất cứ ai nhìn thấy nó bây giờ) – ThunderWiring

Trả lời

11

Bạn có thể tìm thấy câu trả lời in this article.
Để tóm tắt nó, phương pháp này nên làm như lừa:

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

cảm ơn bạn thân! công việc tuyệt vời! –

+0

tại sao điều này cho A = 255 tất cả thời gian? –