我有一个简单的程序,它遍历图像列表,检查图像的宽度和高度,然后根据结果将它们移动到指定的文件夹。我Image.FromFile(path)
用来检查图像,一旦它击中特定图像,我会得到一个OutOfMemoryException
.
此错误的潜在原因已在此处讨论
string directory = @"C:\foo\bar\";
foreach (string path in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".tif", StringComparison.OrdinalIgnoreCase)))
{
//exception thrown here, at Image.FromFile
Image i = Image.FromFile(path);
if (i.Width > i.Height)
{
i.Dispose();
File.Move(path, directory + @"horizontal\" + path.Substring(path.LastIndexOf(@"\") + 1));
}
else
{
i.Dispose();
File.Move(path, directory + @"vertical\" + path.Substring(path.LastIndexOf(@"\")));
}
}
我确定错误的原因,它击中的一些 TIFF 图像(出于某种荒谬的原因!)的位深度为 40,这不是有效的 GDI+ 像素格式,此处供参考。
我可以用 try-catch ( OutOfMemoryException
) 解决这个问题,但我会检查图像是否有有效的像素格式,而不是希望我不会因为任何其他原因而出现异常。