使用kinect和visual studio 2010将BitmapSource转换为位图的问题 [英] Problem to convert BitmapSource to bitmap using kinect and visual studio 2010

查看:64
本文介绍了使用kinect和visual studio 2010将BitmapSource转换为位图的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想得到一个使用Kinect将帧转换为位图,使用emgucv将其转换为灰度,然后将其转换为bitmapsource
以在窗口中显示!我有代码,但是当我运行该程序时,有一个案例,视频冻结或滞后片刻!我打开任务管理器我可以看到该程序消耗了大量的CPU使用时间!!我想知道是否我的代码是正确的或有
另一种方式,以减少消耗!!我认为这是我转换为位图和灰度的部分!

  
    byte[] colorData = null;
    WriteableBitmap colorImageBitmap = null;

    void myKinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
    {

        using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {

            if (colorFrame == null) return;

            if (colorData == null)
                colorData = new byte[colorFrame.PixelDataLength];

            colorFrame.CopyPixelDataTo(colorData);

                if (colorImageBitmap == null)
                {
                    this.colorImageBitmap = new WriteableBitmap(
                        colorFrame.Width,
                        colorFrame.Height,
                        96,  // DpiX
                        96,  // DpiY
                        PixelFormats.Bgr32,
                        null);
                }

                this.colorImageBitmap.WritePixels(
                    new Int32Rect(0, 0, colorFrame.Width, colorFrame.Height),
                    colorData, // video data
                    colorFrame.Width * colorFrame.BytesPerPixel, // stride,
                    0   // offset into the array - start at 0
                    );


                Image<Gray, Byte> My_Image = new Image<Gray, byte>(BitmapFromSource(colorImageBitmap));
                kinectVideo.Source = ToBitmapSource(My_Image);


        }
    }



    private System.Drawing.Bitmap BitmapFromSource(BitmapSource bitmapsource)
    {
        System.Drawing.Bitmap bitmap;
        using (MemoryStream outStream = new MemoryStream())
        {
            BitmapEncoder enc = new BmpBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(bitmapsource));
            enc.Save(outStream);
            bitmap = new System.Drawing.Bitmap(outStream);

        }
        return bitmap;

    }

     [DllImport("gdi32")]
    private static extern int DeleteObject(IntPtr o);


     public static BitmapSource ToBitmapSource(IImage image)
    {
        using (System.Drawing.Bitmap source = image.Bitmap)
        {
            IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap

            BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                ptr,
                IntPtr.Zero,
                Int32Rect.Empty,
                System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

            DeleteObject(ptr); //release the HBitmap
            return bs;
        }
    }

}








推荐答案

嗨Victor,

Hi Victor,

I&将问题转移到Kinect论坛,网址为
http: //social.msdn.microsoft.com/Forums/en-US/home?category=kinectsdk
。这是合适的,更多的专家会帮助你。

I will move the question to the Kinect forums at http://social.msdn.microsoft.com/Forums/en-US/home?category=kinectsdk. It is appropriate and more experts will assist you.


这篇关于使用kinect和visual studio 2010将BitmapSource转换为位图的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆