First commit of the f# source code.
[master-thesis.git] / Parasitemia / WPF / BitmapSourceConverter.cs
diff --git a/Parasitemia/WPF/BitmapSourceConverter.cs b/Parasitemia/WPF/BitmapSourceConverter.cs
new file mode 100644 (file)
index 0000000..413a53b
--- /dev/null
@@ -0,0 +1,47 @@
+//----------------------------------------------------------------------------
+//  Copyright (C) 2004-2015 by EMGU Corporation. All rights reserved.       
+//----------------------------------------------------------------------------
+
+using System;
+using System.Runtime.InteropServices;
+using System.Windows;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Emgu.CV;
+
+namespace Emgu.CV.WPF
+{
+   public static class BitmapSourceConvert
+   {
+      /// <summary>
+      /// Delete a GDI object
+      /// </summary>
+      /// <param name="o">The poniter to the GDI object to be deleted</param>
+      /// <returns></returns>
+      [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;
+         }
+      }
+   }
+}
\ No newline at end of file