4

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

        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()

所以谁能告诉我为什么我在使用代码时遇到这个异常,我已经看到许多其他人成功使用了,但我得到了这个异常???我不知所措!

4

2 回答 2

12

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

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

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

只要摆脱那面旗帜;它仅适用于从 URL 加载时。

于 2013-05-21T17:31:35.133 回答
1

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

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

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

于 2013-05-23T16:04:01.367 回答