我正在在WPF使用FreeImage的包裝器.NET一個簡單的圖像查看器(http://freeimage.sourceforge.net/)圖像查看器和高RAM使用
下面是代碼
public static void OpenImage(string path)
{
_rawImage = new FreeImageBitmap(path);
BitmapSource bs = Utils.BitmapToBitmapSource(_rawImage.ToBitmap());
mainWindow.imageComponent.Source = bs;
mainWindow.imageComponent.Width = _rawImage.Width;
mainWindow.imageComponent.Height = _rawImage.Height;
}
[System.Runtime.InteropServices.DllImport("gdi32")]
static extern int DeleteObject(IntPtr o);
public static BitmapSource BitmapToBitmapSource(System.Drawing.Bitmap source)
{
IntPtr ip = source.GetHbitmap();
BitmapSource bs = null;
try
{
bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip,
IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
finally
{
DeleteObject(ip);
}
return bs;
}
的問題是壓頭尖峯和整體衝壓顯示圖像時的用法。我用於測試的圖像是5000x5000 jpeg。 FreeImage報告說,它在內存中佔用了70MB的ram,這是正確的。我的應用程序需要大約100MB(〜30 WPF和70圖像),如果我只運行這一部分:
_rawImage = new FreeImageBitmap(path);
但是當完整的代碼運行內存峯值約280MB是太多。在生產代碼中,我顯然可以處理所有未使用的物品,但最初的秒殺太多了。我使用IrfanView進行圖像瀏覽,並使用相同的圖像,它只佔用77mb的內存。
我想要一些解決方案(如果有的話)擺脫它加載和轉換圖像爲wpf圖像可以顯示的格式所需的峯值。如果可能的話,可能進一步減少內存使用量我使用大圖片,如果它需要3倍內存來加載一張圖片,那很糟糕。我對WPF和這個東西都比較陌生,所以可能會有一些我錯過的東西。
如果在WPF中沒有可能的解決方案,也許是別的?我很樂意提供建議。
我試過搜索,但沒有找到任何解決我目前的問題。
非常感謝。
我不知道freeimage是什麼,但你不需要WPF中的任何。 WPF擁有自己的一切機制,並不關心GDI或其他蹩腳的恐龍框架。你應該刪除它並使用純WPF的東西來代替。 –
我需要FreeImage,因爲它支持很多像raw,hdr和psd等圖像格式。 – Edgar
[這裏](http://www.codeproject.com/Articles/72002/Displaying-Raw-Images-Using-WPF)是一個使用WPF加載RAW的例子。該freeimage的東西是基於恐龍GDI的東西,這在WPF中效果不佳。 –