以编程方式检测和转换“不支持像素格式”的图像
本文关键字:格式 像素 图像 不支持 方式 编程 检测 转换 | 更新日期: 2023-09-27 18:28:00
当我在首次出现异常的情况下调试WPF应用程序时,我得到了很多带有消息"不支持像素格式"的NotSupportedException
。如果我忽略了这个异常,图像会正常工作,但我无论如何都想修复它们,这样我就有机会查看其他第一次出现的异常。
目前,我正在查看调用堆栈以找出文件名,使用图像编辑器手动转换它,并重新启动调试以获取下一个文件名。然而,我想知道我是否可以用一个小型控制台应用程序自动检测这些图像,并将其转换为WPF满意的格式。
我读过一些参考资料,但由于图像知识有限,我无法理解WPF对这些图像的确切问题,也无法理解如何对其进行编程以检测这些图像,就像它们是从XAML加载的一样,或者如何以编程方式将它们转换为WPF满意的格式。
有多种文件格式-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
可以调用处理图像的代码,因此无需再次循环转换后的文件。