我以前的轉換位圖以BitmapImage的方法是:
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Png);
ms.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
我能夠用加快步伐
Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
編輯: 使用這個任何人都應該知道,bitmap.GetHbitmap CRE茨非託管對象躺在附近,因爲這是不受管理它不會由.NET垃圾收集器被拾取,並且必須被刪除以避免內存泄漏,使用以下代碼來解決這個問題:
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
IntPtr hBitmap = bitmap.GetHbitmap();
try
{
imageSource = Imaging.CreateBitmapSourceFromHBitmap(hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
catch (Exception e) { }
finally
{
DeleteObject(hBitmap);
}
(其不很整齊不必導入喜歡像一個DLL,但是這是從MSDN採取,並且似乎是解決這個問題的唯一辦法 - http://msdn.microsoft.com/en-us/library/1dz311e4.aspx)