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);
}
`
答案 0 :(得分:1)
除了通常不好的行为,要在没有正确处理的情况下抑制异常(至少记录它),你需要更改Visual Studio异常设置(我假设你正在使用VS),你可以告诉它停止破坏在那个特定的例外。
Visual Studio菜单Debug - >例外 - >取消选中Thrown列中的特定异常。
编辑: 在较新的VS版本中,您可以在此处找到: Visual Studio菜单Debug - > Windows - >例外设置 - >取消选中Thrown列中的特定异常。
无论哪种方式,当您运行它而不是从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 ();
这将跳过零长度的图像,从而抑制异常。