您可以使用 aMemoryStream
但实际上会浪费内存,因为位图数据的两个单独副本保存在 RAM 中:当您加载时,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
解决方案,因为它不会在 RAM 中保留两个图像数据副本。