WPF抑制NotSupportedException:“不支持像素格式”

时间:2017-04-13 19:21:19

标签: c# wpf image taglib

NotSupportedException:未找到有关此像素格式的信息。

如何抑制此异常 ,我尝试了try {} catch(NotSupportedException)但是没有抓到应用程序每次进入break模式。

我已经阅读了一些关于如何处理它的问题(当一个人在磁盘上有一个图像文件时),但我的问题是我使用taglib动态生成这些图像,所以将磁盘上的图像作为文件。          this.loadedImage.EndInit();`             尝试             {                 TagLib.File f = TagLib.File.Create(ImageUri);

            if (f.Tag.Pictures.Length > 0)
            {
                TagLib.IPicture pic = f.Tag.Pictures[0];
                MemoryStream ms = new MemoryStream(pic.Data.Data);
                ms.Seek(0, SeekOrigin.Begin);                

                this.loadedImage.BeginInit();
                this.loadedImage.CacheOption = BitmapCacheOption.OnLoad;
                this.loadedImage.DownloadCompleted += this.OnDownloadCompleted;
                this.loadedImage.DownloadFailed += this.OnDownloadFailed;
                this.loadedImage.StreamSource = ms;
                this.loadedImage.EndInit();
            }
            else
            {
              // this.loadedImage = null; 
            }
        }
        catch (NotSupportedException el)
        {

          // MessageBox.Show(el.Message);
        }

`

2 个答案:

答案 0 :(得分:1)

除了通常不好的行为,要在没有正确处理的情况下抑制异常(至少记录它),你需要更改Visual Studio异常设置(我假设你正在使用VS),你可以告诉它停止破坏在那个特定的例外。

Visual Studio菜单Debug - >例外 - >取消选中Thrown列中的特定异常。

编辑: 在较新的VS版本中,您可以在此处找到: Visual Studio菜单Debug - > Windows - >例外设置 - >取消选中Thrown列中的特定异常。

编辑2: 当VS中断异常时,您也可以尝试取消选中该框: You can also try unchecking that box when VS breaks on the exception

无论哪种方式,当您运行它而不是从Visual Studio运行时,您的应用程序应该捕获异常而不会崩溃。

答案 1 :(得分:0)

从此链接"No imaging component suitable to complete this operation was found."

有这条评论

文件大小为零的.png文件会产生同样的错误。

所以实际上在将内存流数据传递给BitmapImage StreamSource之前,你应该检查byte []数组,确定数据确实有效或字节数组长度大于零。

E.g

  MemoryStream ms = new MemoryStream(pic.Data.Data);
  if (pic.Data.Data.Length > 0)
 this.loadedImage.EndInit ();

这将跳过零长度的图像,从而抑制异常。