2011-03-21 75 views
3

我有我需要顯示在屏幕上USHORT []包含圖像數據,在一分鐘我創建一個Windows.System.Drawing.Bitmap和轉換這對一個的BitmapImage但這種感覺就像一個慢無庸置疑的方式來做到這一點。創建的BitmapImage WPF

有沒有人有什麼最快的方法來創建一個USHORT []是的BitmapImage的?

或alternativly創建從一個數據對象的ImageSource?

感謝,

埃蒙·

回答

5

我以前的轉換位圖以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