【问题标题】:Creating BitmapImage throws missing key exception创建 BitmapImage 会引发缺少键异常
【发布时间】:2013-05-21 17:26:07
【问题描述】:

我有一个视图,它显示一个带有标题和评论的图像。 当我加载现有图像时,我使用以下代码:

        this.ArtifactIdentity = image.ArtifactIdentity;
        this.Comment = image.Comment;
        this.Name = image.Name;
        this.MediaIdentity = image.MediaIdentity;
        this.ImageArray = image.Image;
        Image = new BitmapImage();
        Image.BeginInit();
        Image.CacheOption = BitmapCacheOption.None;
        Image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
        Image.StreamSource = new MemoryStream(this.ImageArray);
        Image.EndInit();

当我执行 EndInit() 时,它会抛出异常缺少参数键。堆栈跟踪显示:

  at System.Collections.Hashtable.ContainsKey(Object key)
  at System.Collections.Hashtable.Contains(Object key)
  at System.Windows.Media.Imaging.ImagingCache.RemoveFromCache(Uri uri, Hashtable table)
  at System.Windows.Media.Imaging.BitmapImage.FinalizeCreation()
  at System.Windows.Media.Imaging.BitmapImage.EndInit()

所以谁能告诉我为什么我在使用代码时遇到这个异常?我很茫然!

【问题讨论】:

  • 确切的异常消息是什么?

标签: wpf c#-4.0


【解决方案1】:

这是由 WPF 中的错误引起的,在 BitmapImage.FinalizeCreation():

if ((CreateOptions & BitmapCreateOptions.IgnoreImageCache) != 0)
{
    ImagingCache.RemoveFromImageCache(uri); 
}

如果您指定 IgnoreImageCache,但不从 URI 加载,则会中断。

只要去掉那个标志;它仅适用于从 URL 加载时。

【讨论】:

  • 当我从选项中删除它时,我得到一个新的异常:找不到适合完成此操作的成像组件。我有 bmp、jpg 或 png 作为可能的来源。这就是我得到这个异常的原因吗?
  • @SASS_Shooter:这可能是因为它无法确定要加载的格式。堆栈跟踪是什么?你加载的是什么格式?
  • @SASS_Shooter:试试bitmap.CacheOption = BitmapCacheOption.OnLoad;见stackoverflow.com/a/5346766/34397
【解决方案2】:

我找到了一篇由 Bradley Grainger here 撰写的文章,其中列出了加载 BitmapImage 导致的异常。 SLaks 所说的是正确的,但在 Brad 的文章中,他表示下一个异常(没有适合完成的映像组件...)经常出现在 Windows 7 机器上。该异常表明元数据以某种方式损坏。

我的解决方案进行了一些测试来确认,但基本上如果我获取字节流,将其保存到临时文件中,然后使用该临时文件填充 BitmapImage,我可以成功加载它而没有例外。

这不是最理想的解决方案,但它做了我需要的一件事:它毫无例外地显示图像!

【讨论】:

  • 我赞成这一点,因为有时你只需要一个杂物就可以解决问题并完成工作。我也不喜欢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多