在这里经历的事情使我无休止。我正在尝试使用这种代码填充并显示一堆System.Windows.Controls.Image
元素:
List<BitmapImage> BitmapImageList = new List<BitmapImage>();
int idx = BitmapImageList.Count;
BitmapImageList.Add(new BitmapImage());
BitmapImageList[idx].BeginInit();
BitmapImageList[idx].CacheOption = BitmapCacheOption.OnLoad;
BitmapImageList[idx].CreateOptions = BitmapCreateOptions.DelayCreation;
BitmapImageList[idx].DecodePixelHeight = 230;
BitmapImageList[idx].DecodePixelWidth = 230;
BitmapImageList[idx].UriSource = new Uri(imageFileName, UriKind.Relative);
BitmapImageList[idx].EndInit();
MyImg.Source = BitmapImageList[idx];
问题是,尽管我已验证BitmapImage正确加载,但图像不会显示。通过反复试验,我发现如果在末尾添加这两行,整个工作就可以了:
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.CreateBitmapImageList[idx]));
为什么?我以为从有效文件设置BitmapImage
时会创建UriSource
,并且可以立即用作图像源吗?更改CacheOption
会有所不同吗? (我承认我不了解其作用。)
谢谢。
在这种情况下设置
BitmapImageList[idx].CreateOptions = BitmapCreateOptions.DelayCreation;
是问题,尽管我们不知道为什么,因为该问题缺少相关细节。
请注意,这显然不是通用解决方案。在OP上将其设置为无效的事实可能有很多原因,这些原因只能被猜测。通常,BitmapCreateOptions.DelayCreation
当然是有效的设置。