当我调试带有第一次机会异常的WPF应用程序时,我收到了很多NotSupportedException
消息“不支持像素格式”。如果我忽略了异常,那么图像工作得很好,但无论如何我想修复它们,所以我有机会看看其他第一次机会异常。
目前我正在调查callstack以找出文件名,使用图像编辑器手动转换它,然后重新启动调试以捕获下一个。但是,我想知道我是否可以通过一个小型控制台应用程序自动执行此操作来检测此类图像并将其转换为WPF满意的格式。
我已经阅读了一些参考文献,但是图像知识有限,我无法理解WPF对这些图像的确切问题,或者我如何对其进行编程以检测这些图像,好像它们是从XAML加载的,或者如何以编程方式将它们转换为WPF满意的格式。
答案 0 :(得分:3)
有各种文件格式 - PNG是一种 - 其中几种不同的图像格式存储在同一文件中。在这种情况下,它的图像深度(每像素位数)。那么.NET可能正在做的是尝试首先使用最常见的格式打开文件,当失败时它会尝试不同的格式,直到它获得有效的格式。
由于这是一个罕见的事件,只是尝试打开文件然后捕获结果异常并再试一次是明智的。
由于引发了异常并且(更重要的是)在图像创建代码中处理了异常,因此您无法真正做到这一点。
你遇到了转变“第一次机会异常”的重大危险之一。您将收到许多这些“错误”错误。此模式仅应用于您在不知道引发异常的位置时遇到的实际问题。在成功读取图像时,您确实没有出现错误情况。
如果.NET真的无法读取文件格式,那么你需要捕获异常并在处理程序中做“明智的事情”:
foreach (string file in files)
{
try
{
// Your code to process the image
var image = Image.Fromfile(file);
}
catch (NotSupportedException ex)
{
var process = new Process();
process.Exited += ExitedHandler;
// Call other app to convert file
string arguments = file + command line arguments necessary
process.Start(conversion program, arguments);
}
ExitedHandler
可以调用处理图像的代码,因此无需再次循环转换后的文件。