使用kinect和visual studio 2010将BitmapSource转换为位图的问题 [英] Problem to convert BitmapSource to bitmap using kinect and visual studio 2010
本文介绍了使用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屋!
查看全文