using System; using System.Windows.Media.Imaging; using System.Drawing; using System.Windows.Media; namespace PdfiumViewer.WPFDemo { internal class BitmapHelper { public static BitmapSource ToBitmapSource(Image image) { return ToBitmapSource(image as Bitmap); } /// /// Convert an IImage to a WPF BitmapSource. The result can be used in the Set Property of Image.Source /// /// The Source Bitmap /// The equivalent BitmapSource public static BitmapSource ToBitmapSource(System.Drawing.Bitmap bitmap) { if (bitmap == null) return null; using (System.Drawing.Bitmap source = (System.Drawing.Bitmap)bitmap.Clone()) { IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( ptr, IntPtr.Zero, System.Windows.Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); NativeMethods.DeleteObject(ptr); //release the HBitmap bs.Freeze(); return bs; } } public static BitmapSource ToBitmapSource(byte[] bytes, int width, int height, int dpiX, int dpiY) { var result = BitmapSource.Create( width, height, dpiX, dpiY, PixelFormats.Bgra32, null /* palette */, bytes, width * 4 /* stride */); result.Freeze(); return result; } } }