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;
}
}
}