有多种文件格式(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
可以调用处理图像的代码,因此无需再次遍历转换后的文件。