为什么BitmapImage需要编码器才能显示在WPF图像中?

问题描述 投票:-2回答:1

在这里经历的事情使我无休止。我正在尝试使用这种代码填充并显示一堆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会有所不同吗? (我承认我不了解其作用。)

谢谢。

c# wpf bitmapimage
1个回答
0
投票

在这种情况下设置

BitmapImageList[idx].CreateOptions = BitmapCreateOptions.DelayCreation;

是问题,尽管我们不知道为什么,因为该问题缺少相关细节。

请注意,这显然不是通用解决方案。在OP上将其设置为无效的事实可能有很多原因,这些原因只能被猜测。通常,BitmapCreateOptions.DelayCreation当然是有效的设置。

© www.soinside.com 2019 - 2024. All rights reserved.