Hy, Я пытаюсь преобразовать BitmapSource в Bitmap из Kinect RGB Color Stream. Я получаю null. Я использую Kinect для Windows SDK 1.6, Visual Studio 2012, Windows 7 Ultimate 64bit, EmguCV 2.4.2.1777. Вот код:BitmapSource to Bitmap Возвращает Null (EmguCV2.4.2.1777 + Kinect)
void _kinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return;
}
if (colorFrame != null)
{
this.colorPixels = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(this.colorPixels);
int stride = colorFrame.Width * 4;
colorBmp = BitmapSource.Create(
colorFrame.Width,
colorFrame.Height,
96,
96,
PixelFormats.Bgr32,
null,
colorPixels,
stride
);
currentColorFrame = new Image<Bgr, Byte>(colorBmp.ToBitmap());
this.imgOutput.Source = ImageHelpers.ToBitmapSource(currentColorFrame);
}
}
}
Helper Методы:
public static System.Drawing.Bitmap ToBitmap(this BitmapSource bitmapsource)
{
System.Drawing.Bitmap bitmap;
using (var outStream = new MemoryStream())
{
// from System.Media.BitmapImage to System.Drawing.Bitmap
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);
/// <summary>
/// Convert an IImage to a WPF BitmapSource. The result can be used in the Set Property of Image.Source
/// </summary>
/// <param name="image">The Emgu CV Image</param>
/// <returns>The equivalent BitmapSource</returns>
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;
}
}
Пожалуйста, укажите свою ошибку или дать мне какие-либо предложения как можно скорее.
Я сделал все это, прежде чем приходить сюда. :) Я не знаю, почему я получаю null.I думаю, это из-за EmguCV 2.4. В emguCV 2.3 он работает хорошо. – user1744936
Это странно. Вы используете EmguCV для чего-либо еще или просто для этой операции? –
Для обнаружения и распознавания. – user1744936