在WPF中通常图像都是使用图像源的方式“ImageSource”,个别情况我们在编写代码中得到的是一个 Image 对象 这个时候想要将其转换为“ImageSource”
于是就有了下面的代码:
[DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); //将 Bitmap转换为BitmapSource //使用过System.Drawing.Bitmap后一定要用DeleteObject释放掉对象,不然内存不释放,很快系统内存就消耗光了。 private static ImageSource BitmapToBitmapSource(Bitmap bitmap) { IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。 { throw new System.ComponentModel.Win32Exception(); } return wpfBitmap; }
评论回复