Вы можете использовать MemoryStream
, но на самом деле это тратит впустую память, потому что две отдельные копии растровых данных хранятся в ОЗУ: при загрузке MemoryStream
вы делаете одну копию, а когда растровое изображение декодируется, создается другая копия , Другая проблема с использованием MemoryStream
таким образом заключается в том, что вы обходите кеш.
Лучший способ сделать это - читать прямо из файла, используя BitmapCacheOptions.OnLoad:
path = @"c:\somePath\somePic.jpg"
var source = new BitmapImage();
source.BeginInit();
source.UriSource = new Uri(path, UriKind.RelativeOrAbsolute);
source.CacheOption = BitmapCacheOption.OnLoad;
source.EndInit(); // Required for full initialization to complete at this time
var img = new System.Windows.Controls.Image { Source = source };
Это решение также эффективно и просто.
Примечание. Если вы действительно хотите обойти кеш, например, потому что изображение может изменяться на диске, вам также следует установить CreateOption = BitmapCreateOption.IgnoreImageCache
. Но даже в этом случае это решение превосходит решение MemoryStream
, поскольку оно не хранит две копии данных изображения в ОЗУ.